Мы разработали простой калькулятор на языке Python, который может выполнять различные арифметические операции, включая сложение, вычитание, умножение и деление. Для этого мы создали пользовательские функции add(), subtract(), multiply() и divide(), которые оценивают соответствующую операцию и выводят результат.
Пример:
def add(x,y):
return x + y
def subtract(x,y):
return x - y
def multiply(x,y):
return x * y
def divide(x,y):
return x / y
print("Select operation.")
print("1.Add")
print("2.Subtract")
print("3.Multiply")
print("4.Divide")
while True:
choice = input("Enter your choice(1/2/3/4): ")
if choice in('1', '2', '3', '4'):
number1 = float(input("Enter first number: "))
number2 = float(input("Enter second number: "))
if choice == '1':
print(number1, "+", number2, "=", add(number1, number2))
elif choice == '2':
print(number1, "-", number2, "=", subtract(number1, number2))
elif choice == '3':
print(number1, "*", number2, "=", multiply(number1, number2))
elif choice == '4':
print(number1, "/", number2, "=", divide(number1, number2))
break
else:
print("Entered input is invalid")
Вы можете обратиться к скриншоту ниже, чтобы создать калькулятор на Python.

Выход:
Здесь мы просим пользователя выбрать операцию из предложенных вариантов. Если он выберет опцию под номером 1, 2, 3 или 4, то ввод будет считаться верным. В противном случае на экране появится сообщение «Неверный ввод».
Если выбор пользователя верен, то ему нужно будет ввести два числа. После этого программа выполнит операцию, выбранную пользователем.

С использованием class
Давайте шаг за шагом посмотрим, как создать класс, который будет выполнять основные операции калькулятора:
- Чтобы сделать калькулятор, используя class. Классы необходимы для создания объекта. Классы делают код более эффективным и простым для понимания.
- Сначала мы создадим калькулятор класса, и в нем будут определены все функции, такие как сложение, вычитание, умножение и деление.
- Self используется при вызове функции с помощью obj1.function(). Здесь функция вызовет саму себя.
- Теперь мы возьмем вводимые пользователем данные и объект будет создан.
- И, наконец, создайте, что пользователь выбирает для выполнения необходимой ему операции и выводит значение на выходе.
Пример:
class calculator:
def addition(self):
print(x + y)
def subtraction(self):
print(x - y)
def multiplication(self):
print(x * y)
def division(self):
print(x / y)
x = int(input("Enter first number:"))
y = int(input("Enter second number:"))
obj1 = calculator()
choice = 1
while choice !=0:
print("1. ADDITION")
print("2. SUBTRACTION")
print("3. MULTIPLICATION")
print("4. DIVISION")
choice = int(input("Enter your choice:"))
if choice == 1:
print(obj1.addition())
elif choice == 2:
print(obj1.subtraction())
elif choice == 3:
print(obj1.multiplication())
elif choice == 4:
print(obj1.division())
else:
print("Invalid choice")
Теперь вы можете увидеть код с выводом.

Выход:

Калькулятор без функции
Мы разработали простой калькулятор на Python, который не имеет функции для выполнения различных арифметических операций, таких как сложение, вычитание, умножение или деление.
Пример:
first_val = input("Enter 1st number: ")
first_val = int(first_val)
cal = input("Enter operator: ")
second_val = input("Enter 2nd number: ")
second_val = int(second_val)
if cal == "+":
print(first_val + second_val)
elif cal == "-":
print(first_val - second_val)
elif cal == "*":
print(first_val * second_val)
elif cal == "/":
print(first_val / second_val)
На скриншоте ниже показано, как мы можем создать калькулятор без функции.

Код
Вот код калькулятора на языке Python. Мы создали отдельную функцию для выполнения операций сложения, вычитания, умножения и деления. Функция принимает ввод от пользователя и выбранный им оператор, а затем возвращает результат.
Пример:
def add(x, y):
return x + y
def subtract(x, y):
return x - y
def multiply(x, y):
return x * y
def divide(x, y):
return x / y
print("select an operation")
print("+")
print("-")
print("*")
print("/")
choice = input("Enter any operator to use")
a = int(input("Enter first number: "))
b = int(input("Enter second number: "))
if choice == '+':
print(a,"+",b,"=", add(a,b))
elif choice == '-':
print(a,"-",b,"=", subtract(a,b))
elif choice == '*':
print(a,"*",b,"=", multiply(a,b))
elif choice == '/':
print(a,"/",b,"=", divide(a,b))
else:
print("Invalid input")
Вы можете увидеть снимок экрана ниже для калькулятора в коде Python и вывод.

Выход:

С помощью Tkinter
Давайте рассмотрим, как создать простой калькулятор, используя Python и Tkinter. Надеюсь, этот пример калькулятора на Python с использованием Tkinter поможет вам создать свой собственный калькулятор на Python.
Планирование
В этой части мы рассмотрим, как можно самостоятельно подготовиться к написанию кода для калькулятора на Tkinter с использованием языка Python. Мы обсудим, как будет выглядеть приложение, какие функции оно будет выполнять и где можно найти идеи для его создания.
- Источником вдохновения является калькулятор на операционной системе Windows 10.
- Он имеет серый фон на дисплее и черный фон на кнопках.
- Цвет текста всего приложения белый.
- Приложение всегда открывается в правом нижнем углу.
- Числа отображаются в правой части экрана.
После рассмотрения всего приложения-калькулятора Windows 10 пришло время написать то, что мы собираемся использовать или реализовать в нашем приложении.
- Каждый раз приложение будет открываться в правом нижнем углу.
- приложение будет иметь серый фон на дисплее и черный фон на кнопках.
- Цвет текста всего приложения будет белым.
- окно будет иметь фиксированный размер и не может быть изменено.
- Калькулятор будет иметь базовые функции сложения, вычитания, умножения и деления.
- Числа будут отображаться в правой части экрана.
Алгоритм создания
В этом разделе мы рассмотрим, как создать калькулятор с помощью Tkinter на языке программирования Python. Также мы предоставим диаграмму потоков данных (DFD) для этого калькулятора.
WS = Тк()
ws.title(‘Калькулятор’)
ws.geometry(‘250×400+500+100’)
ws.resizable(0,0)
- первая строка кода используется для инициализации родительского слоя.
- вторая строка используется для установки заголовка окна. Заголовок — это имя в верхней части окна рядом с пером.
- третья строка задает ширину, высоту и положение окна.
- ширина = 250
- высота = 400
- позиция х = 500
- позиция у = 100
- Изменение размера определяет размер экрана, который можно растянуть. Экран можно растягивать по осям x и y. Поскольку мы указали оба значения равными 0. Это означает, что экран нельзя растянуть ни в одну из сторон.
Frame_1 = Кадр(WS)
frame_1.pack(expand=True, fill=BOTH)
- Чтобы разместить виджеты, такие как метки и кнопки, нам нужно создать 4 фрейма.
- Каждому кадру разрешено полностью расширяться в направлениях x и y, если доступно место.
- Таким образом, все рамки будут иметь одинаковое пространство, а расположенные в них кнопки будут симметричными.
- expand=True: позволяет расширить доступное пространство.
- fill=both: направление расширения
key_1 = Кнопка(
кадр_1,
текст = ‘1’,
шрифт =(«Ариал», 22),
граница = 0,
рельеф = ПАЗОВКА,
бг = ‘#2E2E2B’,
fg = ‘белый’,
команда = лямбда: дисплей(1)
)
В этом коде мы создаём кнопку. Чтобы понять, что представляет собой кнопка, обратитесь, пожалуйста, к разделу о кнопках.
Здесь мы вызываем функцию по команде, но не можем передать ей аргумент. Поэтому мы использовали анонимную функцию лямбда. Подробнее об анонимных функциях можно узнать в соответствующем разделе.
Вот DFD калькулятора:

Глобальные переменные:
num = ''
- Переменные, используемые в функции, ограничены только этой функцией.
- Если мы хотим использовать определенную переменную в другой функции.
- Тогда мы должны объявить эту переменную как глобальную переменную.
- В этом коде мы объявили num как глобальную переменную.
- Любая функция, ссылающаяся на эту переменную, должна использовать ключевое слово global перед именем переменной.
- Изменения, внесенные любой функцией в эту переменную, будут наблюдаться и другими функциями.
- Например, если какая-либо функция устанавливает значение числа равным «10», то другие функции, использующие число, также будут иметь значение числа как «10».
Объясняющая функция: equal_bt()
def equal_btn():
global num
add=str(eval(num))
scr_lbl['text'] = add
num=''
- Функция qual_btn() используется несколько раз с небольшим изменением имени переменной в строке 3 и строке 4.
- Здесь важную роль играет встроенная функция eval().
- eval() принимает строку в качестве входных данных, преобразует ее в целое число и выполняет операцию.
- Если строка «2+3» передана в eval, она вернет 5 в качестве вывода.

def clear_scr(число):
def clear_scr():
global num
num = ''
scr_lbl['text'] = num
- Функция вызывается, когда пользователь нажимает C.
- Он очищает все на дисплее и устанавливает значение num в пустую строку.
def display(число):
def display(number):
global num
num = num + str(number)
scr_lbl['text'] = num
- Функция отвечает за отображение чисел на экране.
- Каждый раз, когда пользователь нажимает на кнопку с номером, она согласуется с существующей строкой.
- При нажатии на 1 на экране отображается 1. затем, когда мы нажимаем на 2, отображается 12 и так далее.
Код:
from tkinter import *
ws = Tk()
ws.title('Calculator')
ws.geometry('250x400+500+100')
ws.resizable(0,0)
# global variables
num = ''
# functions
def display(number):
global num
num = num + str(number)
scr_lbl['text'] = num
def clear_scr():
global num
num = ''
scr_lbl['text'] = num
def equal_btn():
global num
add=str(eval(num))
scr_lbl['text'] = add
num=''
def equal_btn():
global num
sub=str(eval(num))
scr_lbl['text'] = sub
num=''
def equal_btn():
global num
mul=str(eval(num))
scr_lbl['text'] = mul
num=''
def equal_btn():
global num
div=str(eval(num))
scr_lbl['text'] = div
num=''
var = StringVar()
# frames
frame_1 = Frame(ws)
frame_1.pack(expand=True, fill=BOTH)
frame_2 = Frame(ws)
frame_2.pack(expand=True, fill=BOTH)
frame_3 = Frame(ws)
frame_3.pack(expand=True, fill=BOTH)
frame_4 = Frame(ws)
frame_4.pack(expand=True, fill=BOTH)
# label
scr_lbl = Label(
frame_1,
textvariable='',
font=('Arial', 20),
anchor = SE,
bg = '#595954',
fg = 'white'
)
scr_lbl.pack(expand=True, fill=BOTH)
# buttons
key_1 = Button(
frame_1,
text='1',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(1)
)
key_1.pack(expand=True, fill=BOTH, side=LEFT)
key_2 = Button(
frame_1,
text='2',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(2)
)
key_2.pack(expand=True, fill=BOTH, side=LEFT)
key_3 = Button(
frame_1,
text='3',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(3)
)
key_3.pack(expand=True, fill=BOTH, side=LEFT)
key_add = Button(
frame_1,
text='+',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display('+')
)
key_add.pack(expand=True, fill=BOTH, side=LEFT)
key_4 = Button(
frame_2,
text='4',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(4)
)
key_4.pack(expand=True, fill=BOTH, side=LEFT)
key_5 = Button(
frame_2,
text='5',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(5)
)
key_5.pack(expand=True, fill=BOTH, side=LEFT)
key_6 = Button(
frame_2,
text='6',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(6)
)
key_6.pack(expand=True, fill=BOTH, side=LEFT)
key_sub = Button(
frame_2,
text='-',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display('-')
)
key_sub.pack(expand=True, fill=BOTH, side=LEFT)
key_7 = Button(
frame_3,
text='7',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(7)
)
key_7.pack(expand=True, fill=BOTH, side=LEFT)
key_8 = Button(
frame_3,
text='8',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(8)
)
key_8.pack(expand=True, fill=BOTH, side=LEFT)
key_9 = Button(
frame_3,
text='9',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(9)
)
key_9.pack(expand=True, fill=BOTH, side=LEFT)
key_mul = Button(
frame_3,
text='*',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display('*')
)
key_mul.pack(expand=True, fill=BOTH, side=LEFT)
key_clr = Button(
frame_4,
text='C',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = clear_scr
)
key_clr.pack(expand=True, fill=BOTH, side=LEFT)
key_0 = Button(
frame_4,
text='0',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display(0)
)
key_0.pack(expand=True, fill=BOTH, side=LEFT)
key_res = Button(
frame_4,
text='=',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = equal_btn
)
key_res.pack(expand=True, fill=BOTH, side=LEFT)
key_div = Button(
frame_4,
text='/',
font=('Arial', 22),
border = 0,
relief = GROOVE,
bg = '#2E2E2B',
fg = 'white',
command = lambda: display('/')
)
key_div.pack(expand=True, fill=BOTH, side=LEFT)
ws.mainloop()
Выход:
