如何使 eval 寄存器整数(例如 05 和 04)有效?
How do I make eval register integers such as 05 and 04 as valid?
我正在使用 tkinter 制作一个 GUI 计算器,运行 遇到了一个我似乎无法解决的问题。该程序的部分要求是计算器可以使用诸如“02+04”之类的输入,这将 return“6”。当我尝试将此计算输入 Entry
字段时,出现错误
SyntaxError: invalid token
我已经尝试查找如何绕过 and/or 解决此错误,但到目前为止还没有成功。任何有关如何使这项工作的帮助将不胜感激!
使用 eval
是不受欢迎的,正如评论和网络上的许多地方所指出的那样。即使对输入进行了清理,它也是一个设计拐杖。
话虽如此,听起来您有义务这样做,因此您可以使用此正则表达式替换您计划 eval
:[=15= 的表达式中数字的前导零]
self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"", self.equation.get()))
正则表达式分解:
( # begin capturing group
(?<=^) # positive lookbehind to beginning of line
| # OR
(?<=[^\.\d]) # positive lookbehind to non-digit, non-period character
) # end capturing group
0+ # literal 0 one or more times
(\d+) # one or more digits (capturing group )
不要忘记在脚本顶部 import re
。
我正在使用 tkinter 制作一个 GUI 计算器,运行 遇到了一个我似乎无法解决的问题。该程序的部分要求是计算器可以使用诸如“02+04”之类的输入,这将 return“6”。当我尝试将此计算输入 Entry
字段时,出现错误
SyntaxError: invalid token
我已经尝试查找如何绕过 and/or 解决此错误,但到目前为止还没有成功。任何有关如何使这项工作的帮助将不胜感激!
使用 eval
是不受欢迎的,正如评论和网络上的许多地方所指出的那样。即使对输入进行了清理,它也是一个设计拐杖。
话虽如此,听起来您有义务这样做,因此您可以使用此正则表达式替换您计划 eval
:[=15= 的表达式中数字的前导零]
self.answer = eval(re.sub(r"((?<=^)|(?<=[^\.\d]))0+(\d+)", r"", self.equation.get()))
正则表达式分解:
( # begin capturing group
(?<=^) # positive lookbehind to beginning of line
| # OR
(?<=[^\.\d]) # positive lookbehind to non-digit, non-period character
) # end capturing group
0+ # literal 0 one or more times
(\d+) # one or more digits (capturing group )
不要忘记在脚本顶部 import re
。