【问题标题】:How can I honor parentheses in evaluating arithmetic expressions? [duplicate]在计算算术表达式时如何使用括号? [复制]
【发布时间】:2019-06-12 23:07:00
【问题描述】:

总的来说,我对 python/编程相当陌生,我正在尝试编写一个函数,它将作为字符串传递的方程转换为其数字表示形式并进行一些基本计算。我在使用括号时遇到了一些问题,因为我不知道如何表示它们的操作顺序。

任何提示帮助将不胜感激。谢谢!

EquationAsString ="( 2 + 3 ) * 5"

def toEquation(EquationAsString):
     Equation = EquationAsString.split(' ')
     #store info in list and use it like a stack, check the type etc.
     answer = 25
     return answer

【问题讨论】:

  • 是否保证空格作为输入脚本的分隔符?
  • 这种练习通常是在正式的计算机科学编译器设计课程中介绍解析器时首先教授的内容之一。不乏在线示例;寻找你正在构建和评估抽象语法树的那些,以沿着正确的道路前进。
  • 我怀疑这个问题不是您应该问的正确问题。这听起来像是一个编程练习,而且您似乎没有考虑过您计划如何“进行一些基本计算”,因为在数学方程式的上下文中,括号没有数字等价物。
  • (要清楚——很多,如果不是大多数,链接的重复问题的答案确实正确处理括号)。
  • 我会使用Python Lex-Yacc 来构建解析器。或者我会转换为 Polish notation - "* + 2 3 5" - 这不需要括号。

标签: python


【解决方案1】:

你可以使用eval方法来做这样的事情。

例子:

print(eval('(2+3)*5'))

输出:

25

如果你真的想把它放在一个函数中:

def evaluation_string(input):
    print(eval(input))

例子

def evaluation_string(input):
    print(eval(input))

string_equation = '(2+3)*5'
evaluation_string(string_equation)

输出:

25

【讨论】:

  • 如果eval 是一个足够的答案,那么这个问题已经在我们的知识库中了。请注意How to Answer 的“回答好问题”部分,以及其中关于“之前已被多次询问和回答”的问题的要点。
  • 谢谢,Eval 是一个很好的开始,@CharlesDuffy 提供的链接也有很大帮助!谢谢!
猜你喜欢
  • 2012-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2011-01-25
  • 2020-04-16
相关资源
最近更新 更多