python - 在 Python 中评估数学表达式

标签 python parsing math binary-tree mathematical-expressions

我想将给定的数学表达式标记为这样的解析树:

((3 + 4 - 1) * 5 + 6 * -7) / 2

                          '/'
                        /     \
                       +        2
                    /     \
                  *         *
                /   \     /   \
               -     5   6     -7
             /   \
            +     1
          /   \
         3     4

是否有任何纯 Python 方法可以做到这一点?就像作为字符串传递给 Python,然后像上面提到的那样作为树返回。

谢谢。

最佳答案

是的,Python ast模块提供了执行此操作的工具。您必须查找适合您的 Python 版本的确切接口(interface),因为 ast 模块似乎会定期更改。

特别是 ast.parse()方法将有助于您的应用程序:

>>> import ast
>>> ast.parse("(1+2)*3", "", "eval")
<_ast.Expression object at 0x88950>
>>> ast.dump(_)
'Expression(body=BinOp(left=BinOp(left=Num(n=1), op=Add(), right=Num(n=2)), op=Mult(), right=Num(n=3)))'

关于python - 在 Python 中评估数学表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049489/

相关文章:

python - 解析字符串模式 - Python

math - 反向传播算法方程的推导

php - 如何在 PHP 中计算 NPER

javascript - 如何在 Python 2.7 中打印非 ASCII 字符到文件

python - Flask 中间件中止 401 导致 500

python - 如何更改 Bash 在 Linux 中查找 Python 的位置?

html - 用于访问和检索信息的 Perl 或 MySQL

python - 减去 Pandas 中两个不平衡的 DataFrame

java - java xml 对非 ascii 字符的解析不正确

algorithm - 理解算法简介,第三版