"""
1.	Написать программу, которая будет складывать, вычитать, умножать или делить
два числа. Числа и знак операции вводятся пользователем. После выполнения
вычисления программа не должна завершаться, а должна запрашивать новые данные
для вычислений. Завершение программы должно выполняться при вводе символа '0'
в качестве знака операции. Если пользователь вводит неверный знак
(не '0', '+', '-', '*', '/'), то программа должна сообщать ему об ошибке и
снова запрашивать знак операции.

Также сообщать пользователю о невозможности деления на ноль,
если он ввел 0 в качестве делителя.

Подсказка:
Вариант исполнения:
- условие рекурсивного вызова - введена операция +, -, *, / - ШАГ РЕКУРСИИ
- условие завершения рекурсии - введена операция 0 - БАЗОВЫЙ СЛУЧАЙ

Решите через рекурсию. Решение через цикл не принимается.
Для оценки Отлично в этом блоке необходимо выполнить 5 заданий из 7

Пример:
Введите операцию (+, -, *, / или 0 для выхода): +
Введите первое число: 214
Введите второе число: 234
Ваш результат 448
Введите операцию (+, -, *, / или 0 для выхода): -
Введите первое число: вп
Вы вместо трехзначного числа ввели строку (((. Исправьтесь
Введите операцию (+, -, *, / или 0 для выхода):
"""


def calculation():
    operation = input("Enter the operation to execute '+', '-', '*', '/' or 0 to exit: ")

    if operation not in ('0', '+', '-', '*', '/'):
        print("Type only '0', '+', '-', '*', '/'")
        return calculation()

    if operation == '0':
        print('Goodbye!')
    else:
        try:
            arg1 = float(input('Enter the 1-st argument: '))
            arg2 = float(input('Enter the 2-d argument: '))
            try:
                print(f'{str(arg1) + " " + operation + " " + str(arg2)} = '
                      f'{round(eval(str(arg1) + operation + str(arg2)), 3)}')
                return calculation()
            except:
                print('Wrong argument')
                return calculation()
        except:
            print('Enter only float numbers')
            return calculation()


calculation()
