在Python中计算eval()时,我如何知道在一些中间步骤中是否得到余数



我有一个字符串,类似于(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>

如果没有效果,您可以尝试使用一些自定义代码对中义表达式求值。参见使用堆栈计算中缀表达式的示例。或者在这个博客上查看一些代码。

似乎没有库或模块或组件来帮助你做你想做的事情。你可能得自己写。

相关内容

最新更新