Skip to content

Instantly share code, notes, and snippets.

@hodunov
Created November 7, 2021 12:19
Show Gist options
  • Save hodunov/58372e636cacf5b47a86c673ad6d3335 to your computer and use it in GitHub Desktop.
Save hodunov/58372e636cacf5b47a86c673ad6d3335 to your computer and use it in GitHub Desktop.
Homework 11- Calc
# Разобраться в коде unit_test_framework.py
# Напишете интерактивный калькулятор.
# Предполагается, что пользовательский ввод представляет собой формулу,
# состоящую из числа, оператора (как минимум + и -) и другого числа,
# разделенных пробелом (например, 1 + 1). Используйте str.split ()
# Если входные данные не состоят из 3 элементов, генерируйте эксепшн FormulaError.
# Попробуйте преобразовать первый и третий элемент в float
# ( float_value = float(str_value)).
# Поймайте любую возникающую ValueError и сгенерируйте вместо него FormulaError
# Если второй элемент не является «+» или «-», киньте эксепшн FormulaError
class FormulaError(Exception):
"""
Raised when the input data does not consists of 3 elements.
"""
def __init__(self, message='Must be a number', *args, **kwargs):
super().__init__(message, *args, **kwargs)
def parse_input(user_input):
"""
Пытаемся конвертировать пользовательский ввод в float.
:param user_input: str
:return: float, str, float
"""
input_list = user_input.split() # default - space
if len(input_list) != 3:
raise FormulaError('Input does not consist of 3 elements')
number_1, operator, number_2 = input_list
try:
number_1, number_2 = float(number_1), float(number_2)
except ValueError:
raise FormulaError()
return number_1, operator, number_2
def add(number1, number2):
return number1 + number2
def multiply(number1, number2):
return number1 * number2
# TODO: add divide and subtract
operations = {'+': add, '*': multiply}
def calculate(num1, operator, num2):
operation = operations.get(operator)
if operation:
return operation(num1, num2)
raise FormulaError(f'{operator} is not a valid operator!')
while True:
user_input = input('>>>> ')
if user_input == 'exit':
break
number1, operator, number2 = parse_input(user_input)
result = calculate(number1, operator, number2)
print(result)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment