80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
"""
|
||
Модуль является результатом выполнения практической
|
||
домашней работы по теме
|
||
"Знакомство с переменными и базовые функции"
|
||
|
||
: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")
|