Использование eval
осуждается, как указано в комментариях и многочисленных местах в Интернете.Даже если вход санирован, это опора дизайна.
Сказав это, звучит так, как будто вы обязаны делать это таким образом, поэтому вы можете использовать это регулярное выражение для замены начальных нулей на числа в выражении, которое вы планируете eval
:
self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"\1\2", self.equation.get()))
Вот repl для целей тестирования.
И разбивка регулярного выражения:
( # begin capturing group \1
(?<=^) # positive lookbehind to beginning of line
| # OR
(?<=[^\.\d]) # positive lookbehind to non-digit, non-period character
) # end capturing group \1
0+ # literal 0 one or more times
(\d+) # one or more digits (capturing group \2)
Не забудьте import re
вверхувашего сценария.