Нашел баг в python(другого объяснения я не могу найти). Любую операцию на 0 трактует как деление

try:
    a = float(input('first: '))
    b = float(input('second: '))
    c = str(input('action: '))

    dict = {'mod': a % b, 'pow': a ** b, 'div': a // b, '+': a + b,
            '-': a - b, '/': a / b, '*': a * b}

    print(dict[c])

except ZeroDivisionError:

    print('Деление на 0!')

[]


Ответы (1 шт):

Автор решения: Eugene X

Вот так будет работать.

Помимо контрольных символов, ты сразу производишь все операции, а это совсем не правильно. Получается что ты сразу считаешь всё... (a % b), (a ** b), ..., (a / b)

10 mod 0 :)))) Ошибка с деления на ноль.

try:
    a = float(input('first: ').rstrip())
    b = float(input('second: ').rstrip())
    c = str(input('action: ').rstrip())

    dict = {
        'mod': lambda: a % b,
        'pow': lambda: a ** b,
        'div': lambda: a // b,
        '+': lambda: a + b,
        '-': lambda: a - b,
        '/': lambda: a / b,
        '*': lambda: a * b
    }

    print(dict[c]())

except ZeroDivisionError:
    print('Деление на 0!')
except ValueError:
    print('Значение должно быть числом')
except KeyError:
    print('Операция неизвестна!')
→ Ссылка