在Python中评估数学表达式

van*_*der 11 python math parsing binary-tree mathematical-expressions

我想将一个给定的数学表达式标记为一个解析树,如下所示:

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

                          '/'
                        /     \
                       +        2
                    /     \
                  *         *
                /   \     /   \
               -     5   6     -7
             /   \
            +     1
          /   \
         3     4
Run Code Online (Sandbox Code Playgroud)

有没有纯Python方法来做到这一点?就像将字符串作为字符串传递给Python然后像上面提到的那样返回树.

谢谢.

Gre*_*ill 9

是的,Python ast模块提供了执行此操作的工具.您必须查找您的Python版本的确切界面,因为该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)))'
Run Code Online (Sandbox Code Playgroud)