当前位置: 首页 > 面试题库 >

用Python评估数学表达式

郁光熙
2023-03-14
问题内容

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

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

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

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

谢谢。


问题答案:

是的,Pythonast模块提供了执行此操作的工具。您必须为您的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)))'


 类似资料:
  • 问题内容: 什么是实现将采用字符串并根据运算符优先级输出结果的python程序的最佳方法(例如:“ 4 + 3 * 5”将输出19)。我在谷歌上寻找解决这个问题的方法,但是它们都太复杂了,我正在寻找一个(相对)简单的方法。 澄清:我需要比eval()稍微先进的东西-我希望能够添加其他运算符(例如,最大运算符-4 $ 2 = 4),或者,我对此在学术上比对专业更感兴趣-我想知道 该怎么 做。 问题答

  • 本文向大家介绍Python用eval评估表达式,包括了Python用eval评估表达式的使用技巧和注意事项,需要的朋友参考一下 示例            

  • 问题内容: 对象在Python中评估的真值是多少? 相关问题 Python中对象的布尔值:有关覆盖对象评估方式的讨论 问题答案: 可以测试任何对象的真值,以在if或while条件中使用或用作以下布尔运算的操作数。以下值为“假”: 没有 假 任何数值类型的零,例如,,,。 任何空序列,例如,,。 任何空映射,例如。 用户定义的类的实例,如果该类定义了或方法,则该方法返回整数0或bool value时

  • 本文向大家介绍评估后缀表达式,包括了评估后缀表达式的使用技巧和注意事项,需要的朋友参考一下 为了求解数学表达式,我们需要前缀或后缀形式。将中缀转换为后缀后,我们需要后缀评估算法来找到正确的答案。 在这里,我们还必须使用堆栈数据结构来解决后缀表达式。 从后缀表达式中,找到一些操作数后,将它们压入堆栈。找到某个运算符后,将从堆栈中弹出两个项目,并按正确的顺序执行操作。之后,结果也被压入堆栈中以备将来使

  • 问题内容: 如何解析和评估字符串(例如)中的数学表达式而不调用其数值? 在该示例中,我希望函数接受并返回。 问题答案: 我最终选择了该解决方案,该解决方案可用于对正整数和负整数进行求和(对正则表达式进行少许修改也可用于十进制): 我不确定它是否比eval()快,但是由于必须多次执行该操作,因此与创建javascript编译器实例负载相比,运行此脚本要舒服得多

  • 我理解经典例子的问题 但我无法说服自己以下是有效的还是无效的 我知道'foo(i)'和'i'的求值顺序是不确定的,但是'评估'到底是什么意思?也就是说bar的第二个参数总是42,或者'i'的当前值可以在foo改变它之前被传入吗?

  • 问题内容: 我正在试验sympy,遇到了一个我无法解决的问题。 使用scipy,我可以编写一个表达式并为x值数组求值,如下所示: 使用sympy,我可以编写相同的表达式,如下所示: 通过执行以下操作,我可以为单个值评估该表达式: 但是我无法像我使用scipy一样,想出如何对x值数组进行评估。我该怎么做? 问题答案: 首先,目前SymPy不保证支持numpy数组,在这种情况下,这就是您想要的。检查此

  • 问题内容: 我正在寻找简单条件表达式的评估器。表达式应包含变量(只读),字符串,数字和一些基本运算符。 例如,这样的表达式: 到目前为止,我实现了一个相当“神奇”的解析器,该解析器返回可以评估的AST,但我不敢相信我是解决该问题的第一个。 我可以使用哪些现有代码代替? 问题答案: SPEL(Spring Expression Lang)怎么样?http://static.springsource.