Поиск по сайту:

Как сделать программу-калькулятор на Python 3


Введение

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

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

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

Предпосылки

Для этого руководства у вас должен быть установлен Python 3 на вашем локальном компьютере и настроена среда программирования на компьютере. Если вам нужно установить Python или настроить среду, вы можете сделать это, следуя соответствующему руководству для вашей операционной системы.

Шаг 1 — Запрашивайте пользователей для ввода

Калькуляторы работают лучше всего, когда человек предоставляет уравнения для решения компьютера. Вы начнете писать свою программу в тот момент, когда человек вводит числа, с которыми он хотел бы, чтобы компьютер работал.

Сначала вы создадите файл для своей программы. В этом примере мы будем использовать текстовый редактор nano и назовем файл calculator.py:

  1. nano calculator.py

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

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

После написания двух строк следует сохранить программу перед ее запуском. Если вы используете nano, вы можете выйти, нажав CTRL + X, затем Y и ENTER.

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

  1. python calculator.py

Это запустит подсказки вашей программы, и вы сможете ответить в окне терминала:

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

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

Вы захотите использовать числа в этой программе по двум причинам:

  1. чтобы программа могла выполнять математические вычисления
  2. для проверки того, что ввод пользователя является числовой строкой

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

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

Теперь, если вы запустите программу и введете два целых числа, вы не столкнетесь с ошибкой:

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

Но если вы введете буквы, символы или любые другие нецелые числа, вы столкнетесь со следующей ошибкой:

Output
Enter your first number: sammy 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: 'sammy'

До сих пор вы настроили две переменные для хранения пользовательского ввода в виде целочисленных типов данных. Вы также можете поэкспериментировать с преобразованием ввода в число с плавающей запятой.

Шаг 2 — Добавление операторов

Прежде чем программа будет завершена, вы добавите четыре математических оператора: + для сложения, - для вычитания, * для умножения, и / для деления.

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

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

print(number_1 + number_2)

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

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

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

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)

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

Output
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 — Добавление условных операторов

Цель программы calculator.py состоит в том, чтобы пользователь мог выбирать между различными операторами. Начните с добавления некоторой информации вверху программы вместе с выбором, который нужно сделать, чтобы человек знал, что делать.

Запишите строку в несколько разных строк, используя тройные кавычки:

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

Эта программа использует каждый из символов оператора, чтобы пользователи могли сделать свой выбор, поэтому, если пользователь хочет выполнить деление, он наберет /. Однако вы можете выбрать любые символы, например 1 для сложения или b для вычитания.

Поскольку вы запрашиваете у пользователей ввод, вы хотите использовать функцию input(). Поместите строку внутрь функции 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 будет выполнять сложение, будет 3 оператора else-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. В этот момент программа показывает выполненное уравнение и произведение:

Output
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() и добавьте дополнительный уровень отступа внутри самой функции. Чтобы убедиться, что программа работает, вы также вызовете функцию в нижней части файла:

# Define our function
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.')

# Call calculate() outside of the function
calculate()

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

Назовите эту функцию again() и добавьте ее после блока кода def calculate()::

... 
# Define again() function to ask user if they want to use the calculator again
def again():

    # Take input from user
    calc_again = input('''
Do you want to calculate again?
Please type Y for YES or N for NO.
''')

    # If user types Y, run the calculate() function
    if calc_again == 'Y':
        calculate()

    # If user types N, say good-bye to the user and end the program
    elif calc_again == 'N':
        print('See you later.')

    # If user types another key, run the function again
    else:
        again()

# Call calculate() outside of the function
calculate()

Несмотря на некоторую обработку ошибок с оператором else выше, вы, вероятно, могли бы сделать его более понятным, чтобы принимать, скажем, строчные y и n в дополнение к верхнему регистру. -case 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()
...

На этом этапе вы должны добавить функцию 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.')

    # Add again() function to calculate() function
    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 calculate.py в окне терминала и сможете выполнять вычисления столько раз, сколько захотите.

Шаг 5 — Улучшение кода

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

def welcome():
    print('''
Welcome to Calculator
''')
...
# Don’t forget to call the function
welcome()
calculate()

Есть возможности ввести дополнительную обработку ошибок по всей программе. Во-первых, вы можете убедиться, что программа продолжает работать, даже если пользователь вводит plankton при запросе числа. Как сейчас выглядит программа, если число_1 и число_2 не являются целыми числами, пользователь получит сообщение об ошибке, и программа перестанет работать. Кроме того, в случаях, когда пользователь выбирает оператор деления (/) и вводит 0 в качестве второго числа (number_2), пользователь получить ошибку ZeroDivisionError: деление на ноль. Для этого вы можете использовать обработку исключений с оператором try ... кроме.

Это упражнение ограничило вас четырьмя операторами, но вы можете добавить дополнительные операторы, например:

...
    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
''')
...
# Don’t forget to add more conditional statements to solve for power and modulo

Кроме того, вы можете захотеть переписать часть программы с оператором цикла.

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

Заключение

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

Нам интересно увидеть ваши решения для этого базового проекта калькулятора командной строки! Пожалуйста, не стесняйтесь публиковать свои проекты калькуляторов в комментариях.

Затем вы можете создать текстовую игру, например крестики-нолики или камень-ножницы-бумага.