我有一个字符串,类似于(4*1+3)/2
,并且想使用eval
来评估答案。我怎么知道在中间步骤中是否会得到余数呢?在这种情况下,我在最后一步得到一个余数,我将计算7/2。
假设所有参数都是整数,并且只允许的操作数是+,-,*,/,(,)。
如果你这样做
from __future__ import division
你将得到新的Python 3风格的除法:
>>> eval("(4*1+3)/2")
3.5
你会知道你在某处得到了余数因为输出类型是float
尝试使用ast.parse
函数:
>>> import ast
>>> x = ast.parse('(4*1+3)/2', mode='eval')
>>> x.body.left
<_ast.BinOp object at 0x100613210>
>>> x.body.right
<_ast.Num object at 0x100613590>
>>> x.body.op
<_ast.Div object at 0x10060d2d0>
如果没有效果,您可以尝试使用一些自定义代码对中义表达式求值。参见使用堆栈计算中缀表达式的示例。或者在这个博客上查看一些代码。
似乎没有库或模块或组件来帮助你做你想做的事情。你可能得自己写。