Как в пайтоне проверить правильность примера?
У меня есть пример похожий на этот "5+6=54" в формате str. Надо проверить верно ли решен пример и если ответ верен, написать верен, а если нет, то не верен.
Ответы (5 шт):
ex = "5+6=64"
if eval(ex.split('=')[0] )== eval(ex.split('=')):
print("Верно")
else:
print("Не верно")
Где-то была тема про калькулятор, где отвечал, но не могу найти. В целом можно использовать парсинг через регулярные выражения. Токенизируем выражение в ключе знак плюс число через 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
В одну строчку.
a = "5+6=11"
print("Верно" if eval(a.replace("=", "==")) else "Не верно")
Ладно, раз стали отвечать, приведу и свой вариант:
a = "5+6=54"
x,y = a.split('=')
print(('не верен','верен')[eval(x) == eval(y)])
Хотя у GrAnd вариант прикольнее )
Ответ от @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 'Не верно')
Надеюсь, мой ответ был хоть сколько-то полезен)