Написание простейшего калькулятора в Python 3

Язык программирования Python является отличным инструментом для обработки чисел и математических выражений. На основе этого качества можно создавать полезные программы.

В данном руководстве вам предлагается полезное упражнение: попробуйте написать простую программу командной строки для выполнения вычислений. Итак, в данном руководстве вы научитесь создавать простейший калькулятор в Python 3.

В руководстве используются математические операторы, переменные, условные выражения, функции.

Требования

Для выполнения руководства нужно установить Python 3 на локальную машину и развернуть среду разработки. Все необходимые инструкции можно найти здесь:

  • Настройка локальной среды разработки для Python 3 в CentOS 7
  • Настройка локальной среды разработки для Python 3 в Windows 10
  • Настройка локальной среды разработки для Python 3 в Mac OS X
  • Настройка локальной среды разработки для Python 3 в Ubuntu 16.04

1: Строка ввода

Для начала нужно написать строку ввода, с помощью которой пользователи смогут вводить данные для вычислений в калькуляторе.

Для этого используйте встроенную функцию input(), которая принимает сгенерированный пользователем ввод с клавиатуры. В круглых скобках функции input() можно передать строку. Пользовательскому вводу нужно присвоить переменную.

В данной программе пользователь сможет вводить два числа. Запрашивая ввод, нужно добавить пробел в конце строки, чтобы отделить ввод пользователя от строки программы.

number_1 = input('Enter your first number: ')
number_2 = input('Enter your second number: ')

Прежде чем запустить программу, сохраните файл. К примеру, назовём программу calculator.py. теперь можно запустить программу в окне терминала в среде разработки с помощью команды:

python calculator.py

Программа предложит вам ввести два числа:

Enter your first number: 5
Enter your second number: 7

На данный момент калькулятор принимает любые входные данные, не ограничиваясь числами: слова, символы, пробелы, даже enter. Это происходит потому, что функция input() принимает данные как строки и не знает, что в данном случае нужны только числа.

Чтобы программа могла выполнять математические вычисления, она не должна принимать никаких данных, кроме чисел.

В зависимости от предназначения калькулятора, программа может преобразовывать строки функции input() в целые числа или в числа с плавающей точкой. В данном случае целые числа подходят больше. Функцию input() нужно передать внутри функции int(), чтобы преобразовать ввод в целое число.

Читайте также:

Типы данных в Python 3

Преобразование типов данных в Python 3

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))

Теперь попробуйте ввести два целых числа:

Enter your first number: 23
Enter your second number: 674

Все работает без ошибок. Однако если вы введёте символы, пробелы или буквы, программа вернёт ошибку:

Enter your first number: hello
Traceback (most recent call last):
File "testing.py", line 1, in <module>
number_1 = int(input('Enter your first number: '))
ValueError: invalid literal for int() with base 10: 'hello'

Итак, вы написали строку для ввода данных в программу.

Примечание: Попробуйте самостоятельно преобразовать входные данные в числа с плавающей точкой.

2: Добавление операторов

Теперь нужно добавить четыре базовых оператора: + (сложение), – (вычитание), * (умножение) и / (деление).

Программу лучше разрабатывать постепенно, чтобы иметь возможность протестировать её на каждом этапе.

Сначала добавьте оператор сложения. Поместите два числа в print, чтобы калькулятор отображал результат.

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))
print(number_1 + number_2)

Запустите программу и попробуйте сложить два числа:

Enter your first number: 8
Enter your second number: 3
11

Теперь можно немного усложнить программу. Пусть кроме результата калькулятор также отображает числа, введенные пользователем.

Читайте также: Форматирование строк в Python 3

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)

Снова запустите программу и попробуйте ввести какие-нибудь числа:

Enter your first number: 90
Enter your second number: 717
90 + 717 =
807

Теперь пользователь сможет убедиться, что ввел правильные числа.

На данном этапе можно добавить остальные операторы, используя такой же формат:

number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))
# Addition
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
# Subtraction
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
# Multiplication
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
# Division
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

Теперь калькулятор может выполнять математические вычисления при помощи операторов +, -, * и /. Далее нужно ограничить количество операций, которые программа может выполнить за один раз.

3: Добавление условного оператора

Читайте также: Условные операторы в Python 3

Добавьте в начало программы calculator.py небольшое описание с перечнем доступных операций. Выбрав один из операторов, пользователь сообщит программе, что именно ей нужно будет делать.

'''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
'''

Примечание: На самом деле здесь можно использовать любые символы (например, 1 для сложения, b для вычитания и так далее).

Передайте строку внутри функции input() и присвойте переменную значению ввода (к примеру, это будет переменная operation).

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)

В эту строку пользователь может ввести любой из предложенных символов, но ничего не произойдёт. Чтобы программа работала, нужно добавить условный оператор. Оператор if будет отвечать за сложение, три оператора elif – за остальные операции; оператор else будет возвращать ошибку, если вместо предложенных операторов пользователь ввёл другой символ.

operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Enter your first number: '))
number_2 = int(input('Enter your second number: '))
if operation == '+':
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
elif operation == '-':
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
elif operation == '*':
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
elif operation == '/':
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)
else:
print('You have not typed a valid operator, please run the program again.')

Итак, сначала программа предлагает пользователю ввести символ операции. Затем она запрашивает два числа. После этого она отображает пользовательский ввод и результат вычислений. Например, пользователь вводит *, затем 58 и 40.

Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
*
Please enter the first number: 58
Please enter the second number: 40
58 * 40 =
2320

Если же на первый запрос программы пользователь введёт символ %, он получит ошибку.

На данный момент программа выполняет все необходимые вычисления. Однако чтобы выполнить другую операцию, программу придётся перезапустить.

4: Определение функций

Чтобы программу не пришлось перезапускать после каждого обработанного примера, нужно определить несколько функций. Для начала поместим весь существующий код в функцию calculate() и добавим в программу ещё один слой. Чтобы программа запускалась, нужно добавить функцию в конец файла.

# Определение функции
def calculate():
operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Please enter the first number: '))
number_2 = int(input('Please enter the second number: '))
if operation == '+':
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
elif operation == '-':
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
elif operation == '*':
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
elif operation == '/':
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)
else:
print('You have not typed a valid operator, please run the program again.')
# Вызов функции calculate() вне функции
calculate()

Создайте ещё одну функцию, состоящую из условных операторов. Этот блок кода позволит пользователю выбрать: продолжить работу с программой или завершить её. В данном случае операторов будет три: один if, один elif и один else для обработки ошибок.

Пусть функция называется again(). Добавьте её в конец блока def calculate():

...
# Определение функции again()
def again():
# Ввод пользователя
calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')
# Если пользователь вводит Y, программа запускает функцию calculate()
if calc_again == 'Y':
calculate()
# Если пользователь вводит N, программа попрощается и завершит работу
elif calc_again == 'N':
print('See you later.')
# Если пользователь вводит другой символ, программа снова запускает функцию again()
else:
again()
# Вызов calculate()
calculate()

Также можно устранить чувствительность к регистру: буквы y и n должны восприниматься так же, как Y и N. Для этого добавьте функцию строки str.upper():

...
def again():
calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')
# Accept 'y' or 'Y' by adding str.upper()
if calc_again.upper() == 'Y':
calculate()
# Accept 'n' or 'N' by adding str.upper()
elif calc_again.upper() == 'N':
print('See you later.')
else:
again()
...

Читайте также: Методы строк в Python 3

Теперь нужно добавить функцию again() в конец функции calculate(), чтобы программа запускала код, который спрашивает пользователя, хочет ли он продолжить работу.

def calculate():
operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
''')
number_1 = int(input('Please enter the first number: '))
number_2 = int(input('Please enter the second number: '))
if operation == '+':
print('{} + {} = '.format(number_1, number_2))
print(number_1 + number_2)
elif operation == '-':
print('{} - {} = '.format(number_1, number_2))
print(number_1 - number_2)
elif operation == '*':
print('{} * {} = '.format(number_1, number_2))
print(number_1 * number_2)
elif operation == '/':
print('{} / {} = '.format(number_1, number_2))
print(number_1 / number_2)
else:
print('You have not typed a valid operator, please run the program again.')
# Добавление функции again() в calculate()
again()
def again():
calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')
if calc_again.upper() == 'Y':
calculate()
elif calc_again.upper() == 'N':
print('See you later.')
else:
again()
calculate()

Запустите программу в терминале с помощью команды:

python calculator.py

Теперь программу не нужно перезапускать.

5: Дополнительные действия

Написанная вами программа полностью готова к работе. Однако есть ещё много дополнений, которые при желании можно внести в код. Например, вы можете написать приветственное сообщение и добавить его в начало кода:

def welcome():
print('''
Welcome to Calculator
''')
...
# Затем нужно вызвать функции
welcome()
calculate()

Также можно добавить в программу больше функций для обработки ошибок. К примеру, программа должна продолжать работу даже если пользователь вводит слово вместо числа. На данный момент это не так: программа выдаст пользователю ошибку и прекратит работу.

Кроме того, если при выборе оператора деления (/) пользователь выбирает знаменатель 0, он должен получить ошибку:

ZeroDivisionError: division by zero

Для этого нужно написать исключение с помощью оператора try … except.

Программа ограничена 4 операторами, но вы можете расширить этот список:

...
operation = input('''
Please type in the math operation you would like to complete:
+ for addition
- for subtraction
* for multiplication
/ for division
** for power
% for modulo
''')
...
# Для возведения в степень и обработки модуля нужно добавить в код условные операторы.

Также в программу можно добавить операторы цикла.

Существует много способов для настройки обработки ошибок и улучшения каждого проекта. При этом всегда важно помнить, что не существует единственно правильного способа решить ту или иную проблему.

Заключение

Теперь вы знаете, как написать простейший калькулятор. После выполнения руководства вы можете самостоятельно добавить новые функции программы.

Tags: ,

10 комментариев

  • Иван «VANQ» Маслов says:

    На третьем шаге перестает работать, упирается в первый print

    • aleksandr_khudyakov says:

      А где отступать?
      operation = input(”’
      Please type in the math operation you would like to complete:
      + for addition
      – for subtraction
      * for multiplication
      / for division
      ”’)
      number_1 = int(input(‘Enter your first number: ‘))
      number_2 = int(input(‘Enter your second number: ‘))
      if operation == ‘+’:
      print(‘{} + {} = ‘.format(number_1, number_2))
      print(number_1 + number_2)
      elif operation == ‘-‘:
      print(‘{} – {} = ‘.format(number_1, number_2))
      print(number_1 – number_2)
      elif operation == ‘*’:
      print(‘{} * {} = ‘.format(number_1, number_2))
      print(number_1 * number_2)
      elif operation == ‘/’:
      print(‘{} / {} = ‘.format(number_1, number_2))
      print(number_1 / number_2)
      else:
      print(‘You have not typed a valid operator, please run the program again.’)

  • Aleksandr Dmitriev says:

    Не работает. При определении функции def calculate() не видит переменную operation

  • aleksandr_khudyakov says:

    На 3 шаге не работает, помогите пожалуйста
    operation = input(”’
    Please type in the math operation you would like to complete:
    + for addition
    – for subtraction
    * for multiplication
    / for division
    ”’)
    number_1 = int(input(‘Enter your first number: ‘))
    number_2 = int(input(‘Enter your second number: ‘))
    if operation == ‘+’:
    print(‘{} + {} = ‘.format(number_1, number_2))
    print(number_1 + number_2)
    elif operation == ‘-‘:
    print(‘{} – {} = ‘.format(number_1, number_2))
    print(number_1 – number_2)
    elif operation == ‘*’:
    print(‘{} * {} = ‘.format(number_1, number_2))
    print(number_1 * number_2)
    elif operation == ‘/’:
    print(‘{} / {} = ‘.format(number_1, number_2))
    print(number_1 / number_2)
    else:
    print(‘You have not typed a valid operator, please run the program again.’)

    • Say My name says:

      После оператора if и elif нужно делать отступ клавишей пробел или таб

    • Mr Creker says:

      num = int(input(‘Сколько чисел будет?(От 2 до 4)’))
      if num == 2:
      one = int(input(‘Введите 1 число’))
      two = int(input(‘Введите 2 число’))
      pit = int(input(‘1 – сложениеn2 – вычитаниеn3 – делениеn4 – умножеинеn Вариант:’))
      if pit == 1:
      print(one + two)
      elif pit == 2:
      print(one – two)
      elif pit == 3:
      print(one / two)
      elif pit == 4:
      print(one * two)
      elif num == 3:
      one = int(input(‘Введите 1 число’))
      two = int(input(‘Введите 2 число’))
      free = int(input(‘Введите 3 число’))
      pit = int(input(‘1 – сложениеn2 – вычитаниеn3 – делениеn4 – умножеинеn Вариант:’))
      if pit == 1:
      print(one + two + free)
      elif pit == 2:
      print(one – two – free)
      elif pit == 3:
      print(one / two / free)
      elif pit == 4:
      print(one * two * free)
      elif num == 4:
      one = int(input(‘Введите 1 число’))
      two = int(input(‘Введите 2 число’))
      free = int(input(‘Введите 3 число’))
      who = int(input(‘Введите 4 число’))
      pit = int(input(‘1 – сложениеn2 – вычитаниеn3 – делениеn4 – умножеинеn Вариант:’))
      if pit == 1:
      print(one + two + free + who)
      elif pit == 2:
      print(one – two – free – who)
      elif pit == 3:
      print(one / two / free / who)
      elif pit == 4:
      print(one * two * free * who)

  • Maxim Suslov says:

    Подскажите пожалуйста, для чего нужен calculate в конце моейго кода? Мы таким образом закрываем функцию? Не совсем понирмаю. Без него программа не работает. https://uploads.disquscdn.com/images/61de49cf26d8a149a99ca121add56a6fc7bbb51059952f6a57d85ff6d9c2e20d.png

  • Mr Creker says:

    Вот мой пример калькулятора, изучаю python 1 день
    num = int(input('Сколько чисел будет?(От 2 до 4)'))
    if num == 2:
    one = int(input('Введите 1 число'))
    two = int(input('Введите 2 число'))
    pit = int(input('1 - сложениеn2 - вычитаниеn3 - делениеn4 - умножеинеn Вариант:'))
    if pit == 1:
    print(one + two)
    elif pit == 2:
    print(one - two)
    elif pit == 3:
    print(one / two)
    elif pit == 4:
    print(one * two)
    elif num == 3:
    one = int(input('Введите 1 число'))
    two = int(input('Введите 2 число'))
    free = int(input('Введите 3 число'))
    pit = int(input('1 - сложениеn2 - вычитаниеn3 - делениеn4 - умножеинеn Вариант:'))
    if pit == 1:
    print(one + two + free)
    elif pit == 2:
    print(one - two - free)
    elif pit == 3:
    print(one / two / free)
    elif pit == 4:
    print(one * two * free)
    elif num == 4:
    one = int(input('Введите 1 число'))
    two = int(input('Введите 2 число'))
    free = int(input('Введите 3 число'))
    who = int(input('Введите 4 число'))
    pit = int(input('1 - сложениеn2 - вычитаниеn3 - делениеn4 - умножеинеn Вариант:'))
    if pit == 1:
    print(one + two + free + who)
    elif pit == 2:
    print(one - two - free - who)
    elif pit == 3:
    print(one / two / free / who)
    elif pit == 4:
    print(one * two * free * who)

  • Hurshid Ergashov says:

    def calculate():
    operation = input(”’ Пожалуйста выбирите действие которое нужно выполнить:
    + это прибавить

    – это убавить

    * это умножить

    / это разделить
    ”’)
    number_1 = int(input(” Ведите первое число: “))
    number_2 = int(input(” Ведите второе число: “))
    # Addition
    if operation == ‘+’:
    print(‘{} + {} = ‘.format(number_1,number_2))
    print(number_1 + number_2)

    # Subtraction
    Вот тут пишет Invalide syntax elif operation == ‘-‘:
    print(‘{} – {} = ‘.format(number_1,number_2))
    print(number_1 – number_2)

    # Multiplication
    elif operation == ‘*’:
    print(‘{} * {} = ‘.format(number_1,number_2))
    print(number_1 * number_2)

    # Division
    elif operation == ‘/’:
    print(‘{} / {} = ‘.format(number_1,number_2))
    print(number_1 / number_2)

    else:
    print(“Пожалуйста выберите одно из выше перечисленных действии: “)

Добавить комментарий