StudyRepo_Synergy/part1_basic/lesson2/calculator.py

80 lines
2.6 KiB
Python
Raw Normal View History

2023-10-11 23:44:24 +03:00
"""
Модуль является результатом выполнения практической
домашней работы по теме
"Знакомство с переменными и базовые функции"
:copyright: Сергей Ванюшкин <pi3c@yandex.ru>
:git: https://git.pi3c.ru/pi3cStudyRepo_Synergy/part1_basic/lesson1
:license: MIT
2023г.
"""
from decimal import Decimal, DecimalException, DivisionByZero
MATH_SYMBOLS = ("+", "-", "*", "/")
def get_num_from_str(string: str) -> int | Decimal | None:
"""Функция валидации и преобразования строки в число.
Проверяет коректность строки и определяет тип
для преобразования строки в числовой тип.
Параметры:
<string> - Число в строковом представлении
Возвращаемые значения:
- num: int Вернет число типа int, если строка может быть
преобразована в целое число
- num: Decimal Если в строке есть точка или запятая
- None Если строку нельзя преобразовать в число
"""
string = string.replace(",", ".")
try:
num = int(string)
return num
except ValueError:
pass
try:
num = Decimal(string)
return num
except DecimalException:
pass
return
print("Привет, Пользователь. Это простой калькулятор")
print("Вам доступны операции: ", *MATH_SYMBOLS)
symbol = input("Введите операцию: ")
while symbol not in MATH_SYMBOLS:
symbol = input("Ошибка, введите коректную операцию: ")
while True:
num1 = get_num_from_str(input("Введите первое число:\n"))
if num1 is not None:
break
print("Ошибка ввода!\n")
while True:
num2 = get_num_from_str(input("Введите второе число:\n"))
if num2 is not None:
break
print("Ошибка ввода!\n")
match symbol:
case "+":
print("Сумма равна:", num1 + num2)
case "-":
print("Разница равна:", num1 - num2)
case "*":
print("Произведение равно:", num1 * num2)
case "/":
try:
print("Частное равно", num1 / num2)
except (DivisionByZero, ZeroDivisionError):
print("Are you crazy, dumbass?\nDivision by Zero, E_P_T")