Как в пайтоне проверить правильность примера?

У меня есть пример похожий на этот "5+6=54" в формате str. Надо проверить верно ли решен пример и если ответ верен, написать верен, а если нет, то не верен.


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

Автор решения: Андрей Коробейников
ex = "5+6=64"
if eval(ex.split('=')[0] )== eval(ex.split('=')):
    print("Верно")
else:
    print("Не верно")

→ Ссылка
Автор решения: Andy Pavlov

Где-то была тема про калькулятор, где отвечал, но не могу найти. В целом можно использовать парсинг через регулярные выражения. Токенизируем выражение в ключе знак плюс число через re.findall('([\+\-=])?(\d+)', text). Дальше проходим по списку "токенов" и выполняем операции по if или можно функции по словарю раскидать.

Ниже вариант для случая суммирования, вычитания и сравнения. Для умножения и деления надо дорабатывать.

import re

def check_res(text):
    opers = re.findall('([\+\-=])?(\d+)', text)
    print(opers)
    res = 0
    for line in opers:
        if not line[0]:
            res = int(line[1])
        else:
            if line[0] == '+':
                res += int(line[1])
            elif line[0] == '-':
                res -= int(line[1])
            elif line[0] == '=':
                res = (res == int(line[1]))
                break
    return res

text = '5+6=54'
print(check_res(text))  # False
text = '55-1=54'
print(check_res(text))  # True

Вывод:

[('', '5'), ('+', '6'), ('=', '54')]
False
[('', '55'), ('-', '1'), ('=', '54')]
True
→ Ссылка
Автор решения: GrAnd

В одну строчку.

a = "5+6=11"
print("Верно" if eval(a.replace("=", "==")) else "Не верно")
→ Ссылка
Автор решения: CrazyElf

Ладно, раз стали отвечать, приведу и свой вариант:

a = "5+6=54"
x,y = a.split('=')
print(('не верен','верен')[eval(x) == eval(y)])

Хотя у GrAnd вариант прикольнее )

→ Ссылка
Автор решения: zaborschicov

Ответ от @GrAnd крутой, но мне кажется более "по питоновски" решить так(ну ещё я постараюсь объяснить как всё работает):

forcheck, answer = input().split('=') #получаем ввод и делим его на выражение и ответ
answer = float(answer) #перводим тип из str в float
result = eval(forcheck) #получаем ответ на выражение
if result == answer: #проверяем ответ
    print('Верно')
else:
    print('Неверно')

То же самое но в одну строку(вот это как раз "по питоновски"):

forcheck, answer = input().split('=')
print('Верно' if eval(forcheck)==float(answer) else 'Не верно')

Надеюсь, мой ответ был хоть сколько-то полезен)

→ Ссылка