Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何为简单的字符串方程创建自己的简单求值方法?_Python_Algorithm - Fatal编程技术网

Python 如何为简单的字符串方程创建自己的简单求值方法?

Python 如何为简单的字符串方程创建自己的简单求值方法?,python,algorithm,Python,Algorithm,我正在尝试编写一个简单的方法来解析字符串方程,如“5*3-3+13”,并在不使用eval()的情况下计算结果。我对如何设置运算符优先级有问题。我最初的想法是使用递归,但当方程中有连续的乘法或除法时,我会遇到麻烦。另一个想法是通过循环方程首先找到乘法和除法,但这需要太多的时间。有什么想法我可以利用吗?您试图做的是解析和计算一个简单的代数表达式。这是一个涉及面很广的主题,您不一定需要使用pythoneval,尤其是在担心代码注入的情况下 您可以使用现有库快速解决这个问题。我的第一个想法是同情 例如

我正在尝试编写一个简单的方法来解析字符串方程,如“5*3-3+13”,并在不使用
eval()
的情况下计算结果。我对如何设置运算符优先级有问题。我最初的想法是使用递归,但当方程中有连续的乘法或除法时,我会遇到麻烦。另一个想法是通过循环方程首先找到乘法和除法,但这需要太多的时间。有什么想法我可以利用吗?

您试图做的是解析和计算一个简单的代数表达式。这是一个涉及面很广的主题,您不一定需要使用python
eval
,尤其是在担心代码注入的情况下

您可以使用现有库快速解决这个问题。我的第一个想法是同情

例如


您期望的值是
int(f)
double(f)
,这取决于您是想要整数还是想要允许浮点值

这样做有什么原因吗?我的意思是,
symphy
一个伟大的python包,可以做到这一点和更多。
eval
将是一个快速的解决方案,但使用for-loop方法和操作符检查会更好,或者使用python
parser
结合
eval
我只想了解它的实际工作原理,我刚刚找到了需要的算法,叫做“调车场和后缀计算器算法”,谢谢
import sympy
f = sympy.sympify("5*3-3+13")