Больше не нужно искать работу мечты — присоединяйтесь к команде Клауда

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

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

В последние годы цифровой мир всё больше использует облачные системы. Сервисы вроде 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

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

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

Заключение

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

Хотите внести свой вклад?
Участвуйте в нашей контент-программе за
вознаграждение или запросите нужную вам инструкцию
img-server
18 апреля 2022 г.
34453
13 минут чтения
Средний рейтинг статьи: 5
Пока нет комментариев