""" Модуль является результатом выполнения практической домашней работы по теме "Знакомство с переменными и базовые функции" :copyright: Сергей Ванюшкин :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: """Функция валидации и преобразования строки в число. Проверяет коректность строки и определяет тип для преобразования строки в числовой тип. Параметры: - Число в строковом представлении Возвращаемые значения: - 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")