给定一个字符串形式的括号内方程的各种布局的输入,例如'(3-7)/5'
,我想检查它的求值中的任何一点是否包含一个非整数
例如,'(3/2)+1'
立即包含一个float
,并且在完全求值时仍然是float
,即2.5
。但是像'(5/2)*2'
这样的函数只是一个浮点数,然后可以作为一个整数来计算,或者,通过eval()
函数,'(4/2)+3'
在计算之后是一个浮点数,即使在计算过程中不存在非整数
当我试图解决这个问题时,我唯一能想到的就是在字符串中搜索/
运算符,然后找到包含该除法的最小括号集。所以对于'(2+1)/4'
,它首先要计算2+1
,然后可以检查非整数除法
有什么想法吗
不幸的是,有太多的东西可以产生这样的价值观。例如
**
可以用来计算平方根,通常传递给eval
的内容可以是任何内容我认为使用} 函数来获得表示表达式的AST (abstract syntax tree),然后编写自己的简单解释器来计算它。在这个解释器中,您可以在每一步执行所有需要的检查
eval
根本不是一个好方法。您可以使用^{你可以这样写:
这是一点工作,但如果你只想处理简单的表达式,那就没那么多了。在这些函数中,您可以自由地简化/交换节点,以更改表达式的计算方式
您还应该通过指定
eval
求值模式(即eval(your_expr, '<fake-filename>', 'eval')
)来解析代码相关问题 更多 >
编程相关推荐