Top.Mail.Ru
Публичное облако на базе VMware с управлением через vCloud Director
Вход / Регистрация

Простой калькулятор на Python

Команда Timeweb Cloud
Команда Timeweb Cloud
Наши инженеры, технические писатели, редакторы и маркетологи
18 апреля 2022 г.
43822
13 минут чтения
Средний рейтинг статьи: 3

В последние годы цифровой мир всё больше использует облачные системы. Сервисы вроде timeweb.cloud доказали своё удобство и надёжность, мгновенно обрабатывая гигантские объёмы информации. Но сегодня мы вспомним основы современных технологий и расскажем вам, как написать программу-калькулятор своими руками.

Простой Калькулятор На Python (1)

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

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

У настольного калькулятора есть:

  •     Кнопки с цифрами
  •     Кнопки с математическими операциями
  •     Дисплей
  •     Микросхемки внутри

В функции настольного калькулятора входит:

  •     Сложение
  •     Вычитание
  •     Деление 
  •     Умножение
  •     Сброс операции
  •     Сохранение результата
  •     Вычисление процента
  •     Взятие корня числа

Для понимания принципа написания калькулятора возьмем из этого списка минимальный набор функций:

  •     Ввод чисел
  •     Вывод результата
  •     Сложение
  •     Вычитание
  •     Деление
  •     Умножение

Код можно писать прямо в онлайн-редакторе.

Например:

Примеры кода математических операций

Математические операции, которые будем использовать:

  
2+2 4 10-5 5 3*3 9 12/4 3.0

Вывод значения

Чтобы видеть результат, его нужно вывести на экран. Для этого существует функция print(), которая выводит аргументы в скобках в консоль.

  
print(4 * 4) 16

Эта функция будет аналогом дисплея нашего калькулятора.

Сохранение результата в переменную

Чтобы не производить вычисления внутри функции print(), будем хранить их в переменной.

  
result = 16 / 8

Далее мы сможем вывести в консоль значение переменной.

  
print(result) 2.0

Чтение строк

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

  
text = input() # Hi Hi

Выведем результат на экран.

  
print(text) Hi

Если передать внутрь функции input() текст, то он выводится на экран перед тем, как начнётся считывание строки.

  
username = input('Enter your name: ') # Иван print(username) Enter your name: Иван Иван

Объединение и форматирование строк

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

  
print('Hello, ' + username + '!') Hello, Иван!

Ещё один способ объединения текста с данными — использование форматированных строк. Для этого перед кавычками необходимо поставить символ f, а данные записывать прямо внутри строки в фигурных скобках. Такой функционал появился с версии Python 3.6.0.

  
print(f'Hello, {username}!') Hello, Иван!

Перевод строк в число

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

  
# Считываем данныеa = input('Введите первое число: ') b = input('Введите второе число: ')​ # Производим вычисления result = a + b # Выводим результат в консоль print(f'Сумма чисел {a} и {b} равняется: {result}') Введите первое число: 12 Введите второе число: 55 Сумма чисел 12 и 55 равняется: 1255

Что-то пошло не так. Числа не сложились, а объединились как текст. Дело в том, что input() в Python возвращает ввод строки с клавиатуры, даже если вы вводили только числа. Такое поведение более явное, что соответствует философии Python: «Явное лучше, чем неявное». Для того чтобы исправить возникшую ошибку, используем функцию перевода строки в число: int(). Посмотрим на примере, как работает num int input:

  
num = int(input()) print(num + 10) 32 42

Отредактируем нашу программу.

  
# Считываем данныеa = int(input('Введите первое число: ')) b = int(input('Введите второе число: ')) # Производим вычисления result = a + b # Выводим результат в консоль print(f'Сумма чисел {a} и {b} равняется: {result}') Введите первое число: 12 Введите второе число: 55 Сумма чисел 12 и 55 равняется: 67

Обработка некорректных данных

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

  
int(input('Введите первое число: ')) Введите первое число: abc ------------------------------------------------------------------------ ValueError  Traceback (most recent call last) C:\Temp\ipykernel_5404\317567321.py in <module> ----> 1 int(input('Введите первое число: ')) ValueError: invalid literal for int() with base 10: 'abc'

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

Облачные серверы

Масштабируемые вычислительные ресурсы
по всему миру с почасовой оплатой

Создание функций

Итак, у нас есть практически все компоненты для того, чтобы написать полноценный калькулятор. Давайте расширим функционал текущей версии до выполнения всех математических операций, которые мы запланировали:       

  • Сложение
  • Вычитание
  • Деление
  • Умножение

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

  
# Сложение def sum(a, b):    result = a + b    return result

Определяем функцию с помощью ключевого слова def, пишем её название и в скобках указываем, какие параметры она принимает. Далее в теле функции пишем то, что она должна выполнять и возвращаем результат с помощью ключевого слова return .

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

  
def test(): print(123)  File "C:\Temp\ipykernel_5404\353670293.py", line 2     print(123)     ^ IndentationError: expected an indented block

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

  
x = sum(10, 15) print(x) 25

Аналогичным образом создадим остальные функции вычисления.

  
# Вычитаниеdef subtract(a, b):    result = a - b    return result # Умножение def multiply(a, b):    result = a * b    return result # Деление def divide(a, b):    result = a / b    return result

Условные операторы

Функции операций готовы. Осталось написать простой код на питоне, который предоставит пользователю возможность выбора этих операций. Будем использовать уже знакомый нам ввод с клавиатуры и условные операторы. Условные операторы работают очень просто. Их название говорит само за себя.

  
Если условие истинно, например 2 == 2, то выполняем один блок кода , иначе выполняем другой блок кода

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

  
# спрашиваем у пользователя пароль password = input('Введите пароль: ') # Проверяем, соответствует ли он задуманному нами if password == 'qwerty':    print('Верно!') else:    print('Неправильный пароль') Введите пароль: йцукен Неправильный пароль # спрашиваем у пользователя пароль password = input('Введите пароль: ') # Проверяем, соответствует ли он задуманному нами if password == 'qwerty':    print('Верно!') else:    print('Неправильный пароль') Введите пароль: qwerty Верно!

Обратите внимание, что блоки кода также пишутся с отступами, как и в функциях. Двоеточие также обязательно.

Сразу же применим полученные знания к нашему калькулятору. Будем спрашивать у пользователя, какую операцию он хочет совершить, и, в зависимости от ввода, вызывать соответствующую функцию вычисления. Для начала просто выведем текст выбранной операции или сообщение, что такой операции не существует. Следующим шагом заменим текст на вызов операции и объединим его с уже существующей логикой калькулятора.

  
# Подготовим сообщение для пользователя о доступных математических операциях. # В тройных кавычках можно хранить многострочный текст. message = ''' Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:​ + : Сложение - : Вычитание / : Деление * : Умножение Ваш выбор: '''# Запрашиваем у пользователя желаемое действие operation = input(message)​ # Выводим сообщение о выбранной операции или что она отсутствует if operation == '+':    print('Сложение') elif operation == '-':    print('Вычитание') elif operation == '/':    print('Деление') elif operation == '*':    print('Умножение') else:    print('Неизвестная операция')  Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:  + : Сложение - : Вычитание / : Деление * : Умножение  Ваш выбор: + Сложение 

Собираем всё в единое целое

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

  
def calculate(a, b, operation):    result = None     if operation == '+':        result = sum(a, b)    elif operation == '-':        result = subtract(a, b)    elif operation == '/':        result = divide(a, b)    elif operation == '*':        result = multiply(a, b)    else:        print('Неизвестная операция')        return result

Также добавим функцию для запроса операции.

  
def ask_operation():    message = ''' Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение Ваш выбор:    '''    # Запрашиваем у пользователя желаемое действие    operation = input(message)     return operation

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

  
def run_calculator():    # Запрашиваем данные    a = int(input('Введите первое число: '))    b = int(input('Введите второе число: '))    # Запрашиваем тип операции    operation = ask_operation()    # Производим вычисления    result = calculate(a, b, operation)    # Выводим результат в консоль    print(f'Результат вычислений: {result}')

Проверяем!

  
run_calculator() Введите первое число: 15 Введите второе число: 15 Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение Ваш выбор:     * Результат вычислений: 225

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

Расширение функционала и улучшение кода

Добавление операций

Благодаря тому, что функции вычисления вынесены в отдельные модули calculate python, мы можем с лёгкостью расширять функционал калькулятора.

Давайте добавим операцию возведения в степень.

  
def pow(a, b):    result = a ** b    return result

Добавляем операцию в функцию вычисления.

  
def calculate(a, b, operation):    result = None    if operation == '+':        result = sum(a, b)    elif operation == '-':        result = subtract(a, b)    elif operation == '/':        result = divide(a, b)    elif operation == '*':        result = multiply(a, b) ​   # Возведение в степень    elif operation == '^' or operation == '**':        result = pow(a, b)    else:        print('Неизвестная операция')    return result

Также добавим пояснения в функцию запроса действия.

  
def ask_operation():    message = ''' Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение ^ или ** : Возведение в степень Ваш выбор: '''    # Запрашиваем у пользователя желаемое действие    operation = input(message)    return operation

Проверяем, запустив функцию run_calculator().

  
run_calculator() Введите первое число: 2 Введите второе число: 8 Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение ^ или ** : Возведение в степень Ваш выбор: ** Результат вычислений: 256

Тестирование и обработка ошибок

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

  
run_calculator() Введите первое число: 3 Введите второе число: 5 Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение ^ или ** : Возведение в степень Ваш выбор: & Неизвестная операция Результат вычислений: None

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

Циклы

Давайте изменим поведение программы и позволим пользователю повторно выбрать требуемую операцию.

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

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

  
text = None while text != '':    text = input('Напишите что-нибудь или оставьте строку пустой, чтобы закончить:\n')    print(f'Вы ввели: {text}\n') print('Завершение программы') Напишите что-нибудь или оставьте строку пустой, чтобы закончить: 123 Вы ввели: 123 Напишите что-нибудь или оставьте строку пустой, чтобы закончить: test Вы ввели: test Напишите что-нибудь или оставьте строку пустой, чтобы закончить: Вы ввели: Завершение программы

Теперь применим это к калькулятору.

Для этого изменим функцию запроса операции ask_operation

  
def ask_operation():    message = ''' Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: + : Сложение - : Вычитание / : Деление * : Умножение ^ или ** : Возведение в степень Ваш выбор: '''    # Создадим список с возможными операциями    correct_operations = ['+', '-', '/', '*', '^', '**']    # Первый раз запрашиваем у пользователя желаемое действие    operation = input(message)    # Запускаем цикл, если операции нет в списке    while operation not in correct_operations:        print('Такая операция недоступна. Повторите попытку.')        operation = input(message)    return operation

Вычисления не производятся до тех пор, пока не будет введена корректная операция. Тест пройден.

Подготовили для вас выгодные тарифы на облачные серверы

  • Premium 3.3 ГГц
  • Dedicated CPU
Москва
Cloud MSK 15

300 ₽/мес

Процессор
1 x 3.3 ГГц
Память
1 ГБ
NVMe
15 ГБ
Канал
1 Гбит/с
Публичный IP
Cloud MSK 30

550 ₽/мес

Процессор
1 x 3.3 ГГц
Память
2 ГБ
NVMe
30 ГБ
Канал
1 Гбит/с
Публичный IP

Заключение

Сегодня легко найти калькулятор на любой вкус: встроенные в различные приложения, сайты с калькуляторами, обычные физические калькуляторы, разнообразные инженерные модификации, включая такие интересные калькуляторы, как python ipcalc, позволяющий выполнять расчёты IP-подсети. Но что может быть лучше, чем вещь, сделанная и модернизированная своими руками?

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
18 апреля 2022 г.
43822
13 минут чтения
Средний рейтинг статьи: 3
  • Ваш комментарий
  • Предпросмотр
Пока нет комментариев
Произошла неизвестная ошибка
Мы используем на сайте куки.
В интернете без них никак