Ошибка. Имя/переменная "тут имя" не определено # работа с функцией eval()

неЕгор

Новичок
Пользователь
Дек 9, 2022
4
1
1

Есть код:
Python:
a = "4 * 100 - 54"
x = input("Реши пример: " + a + " = ")
z = type(eval(x))
if z == str:
    print("Цифрами пиши, цифрами! Арабскими!")
elif (z == int or z == float) and int(x) == eval(a):
    print("Твой ответ: " + x, "\t" * 2, "Верный ответ: " + str(eval(a)))
    print("Надо же, даже совпало...")
elif (z == int or z == float) and int(x) != eval(a):
    print("Твой ответ: " + x, "\t" * 2, "Верный ответ: " + str(eval(a)))
    print("Э, иди математику учи!")
else:
    print("Это вообще абракадабра какая-то... Ты идиот?")

Ошибка в третьей строке. Если ввести текст (набор символов), то на этапе eval(x) все остановится с таким ответом:
File "C:\Users\задача1.py", line 3, in <module>
z = type(eval(x))
^^^^^^^
File "<string>", line 1, in <module>
NameError: name 'scdv' is not defined

'scdv' - это естественно был ввод.
Читаю книжки, где пишется про eval(), пытаюсь на форумах найти пояснения, но кроме "удачного" и "полезного" использования функции пояснений нет, хотя в книге написано, что eval() работает с текстом и выводит набор символов (если не ошибаюсь в книге Васильева это сказано). Сильно тапком не бейте, я еще плохо понимаю специфическую терминологию, можно сказать только из excel'я вырвался, до сих пор ЕСЛИ пишу по тому принципу.
Итак вопрос - почему интерпритатор выдает ошибку? Я так понимаю, что функция выводит набор символов, а интерпритатор говорит, что этому набору символов ничего не соответствует, так?
 

Форум IT Специалистов