Как сделать действительными целочисленные регистры eval, такие как 05 и 04?(Python) - PullRequest
0 голосов
/ 25 августа 2018

Я делаю графический калькулятор с использованием tkinter и столкнулся с проблемой, которую не могу исправить. Частью требований программы является то, что калькулятор работает с вводом, таким как «02 + 04», который возвращает «6». Когда я пытаюсь ввести этот расчет в поле ввода, я получаю сообщение об ошибке «SyntaxError: invalid token». Я пытался найти способ обойти эту проблему и / или устранить ее, но пока не повезло.

Буду признателен за любую помощь в том, как сделать эту работу!

1 Ответ

0 голосов
/ 25 августа 2018

Использование 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 вверхувашего сценария.

...