我正在编写一个程序,其中将方程式作为字符串输入,然后进行计算。到目前为止,我想出了这个:
test_24_string = str(input("Enter your answer: "))
test_24 = eval(test_24_string)
我需要这个等式的字符串版本和评估版本。然而, eval
是一个非常危险的功能。但是,使用 int()
不起作用,因为它是一个等式。是否有一个 Python 函数可以从字符串中计算数学表达式,就像输入数字一样?
原文由 Aamri 发布,翻译遵循 CC BY-SA 4.0 许可协议
一种方法是使用 numexpr 。它主要是一个用于优化(和多线程) numpy 操作的模块,但它也可以处理数学 python 表达式:
您可以在结果上调用
.item
以获得类似 python 的类型:这是一个第三方扩展模块,所以它在这里可能完全矫枉过正,但它绝对比
eval
更安全,并且支持相当多的功能(包括numpy
和math
操作).如果还支持“变量替换”:使用 python 标准库的一种方法,尽管非常有限,是
ast.literal_eval
。它适用于 Python 中最基本的数据类型和文字:但是失败了更复杂的表达式,例如:
不幸的是,除了
+
和-
之外的任何运营商都是不可能的:我在这里复制了部分文档,其中包含受支持的类型: