Написать программу — калькулятор с переменными и обработкой ошибок. Программа построчно вводит команды калькулятора, и если надо, выводит результат их выполнения или ошибку. Конец ввода — пустая строка. Все буквы — английские.
Строка, начинающаяся на '#' — комментарий, такие строки игнорируются
- Пробелы считаются разделителями
Строка вида Идентификатор = выражение задаёт переменную Идентификатор
идентификатор определяется как .isidentifier()
Если слева от "=" стоит не идентификатор, выводится ошибка "Assignment error"; всё, что справа, игнорируется, присваивания не происходит
Выражение вычисляется по правилам Python с помощью eval() в пространстве имён заданных переменных (без __builtins__)
Если выражение нельзя вычислить, потому что оно синтаксически некорректно, выводится ошибка "Syntax error"
Если выражение нельзя вычислить, потому что в нём встречаются неопределённые переменные, выводится ошибка "Name error"
Если выражение нельзя вычислить по какой-то другой причине, выводится "Runtime error"
Соответствующая ошибка выводится даже в том случае, когда строка, содержащая «=», являлась допустимым выражением Python (например, A<=2 или A==3)
Строка вида выражение выводит значение выражения.
# Ошибок нет 234 10/3 A = 3*(2+(1-7)%5) A+100 + ++ - -- - + - - 0 for = 100500 # Начинаются ошибки 7*B 3=3 A=B=5 A() A/0 for
Подсказка 1: удобно пользоваться eval() с тремя параметрами
for = 100500 — не ошибка, потому что "for".isidentifier() == True!
A=B=5: «B=5» не является синтаксически корректным выражением ⇒ Syntax error
A(): является синтаксически корректным выражением, но eval("A()") выбрасывает исключение ⇒ Runtime error
for — ошибка, потому что for для Python — ключевое слово
234 3.3333333333333335 118 0 Name error Assignment error Syntax error Runtime error Runtime error Syntax error