StudyRepo_Synergy/code_of_future/part1_basic/lesson2/calculator.py

80 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"""
Модуль является результатом выполнения практической
домашней работы по теме
"Знакомство с переменными и базовые функции"
:copyright: Сергей Ванюшкин <pi3c@yandex.ru>
:git: https://git.pi3c.ru/pi3c/StudyRepo_Synergy.git
: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")