Python 运算符
我最近在学习Python,写了一段代码来计算后缀表达式。
postfix_expression = "34*34*+"
stack = []
for char in postfix_expression :
try :
char = int(char);
stack.append(char);
except ValueError:
if char == '+' :
stack.append(stack.pop() + stack.pop())
elif char == '-' :
stack.append(stack.pop() - stack.pop())
elif char == '*' :
stack.append(stack.pop() * stack.pop())
elif char == '/' :
stack.append(stack.pop() / stack.pop())
print stack.pop()
有没有什么方法可以避免写那么多的if else语句?比如,有没有什么模块可以接收一个字符串形式的数学运算符,然后自动调用对应的数学运算,或者有什么Python的写法可以让这个变得简单一些?
2 个回答
-1
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个特定的功能时,发现它并没有按照预期的方式工作。这时候,查看相关的讨论和解决方案就显得非常重要。
在这些讨论中,大家会分享他们的经验和解决办法,帮助彼此理解问题的根源。有时候,问题的解决方案可能很简单,只需要调整一些设置或者更新软件版本。而有时候,可能需要更深入的分析,甚至是查阅一些文档来找到答案。
总之,遇到问题时,不要慌张,先看看别人是怎么解决的,或者在网上寻找相关的信息,通常会有很多人愿意分享他们的经验和知识。
# This code is untested
from operator import add, sub, mul, div
# read the docs; this is a tiny part of the operator module
despatcher = {
'+': add,
'-': sub,
# etc
}
opfunc = despatcher[op_char]
operand2 = stack.pop()
stack[-1] = opfunc(stack[-1], operand2)
17
operator
模块里有一些函数,可以实现标准的算术运算符。这样,你就可以设置一个映射,比如:
OperatorFunctions = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.div,
# etc
}
然后你的主循环可以像这样:
for char in postfix_expression:
if char in OperatorFunctions:
stack.append(OperatorFunctions[char](stack.pop(), stack.pop()))
else:
stack.append(char)
你需要注意,减法和除法的操作数要按照正确的顺序从栈中取出来。