# Разобраться в коде 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)