我在过去几天学习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()
Run Code Online (Sandbox Code Playgroud)
有没有办法可以避免那个巨大的if else块?就像在,是否有模块以字符串形式接受数学运算符并调用相应的数学运算符或一些使这简单的python成语?
Gre*_*ill 16
该operator模块具有实现标准算术运算符的函数.有了它,您可以设置如下映射:
OperatorFunctions = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.div,
# etc
}
Run Code Online (Sandbox Code Playgroud)
然后你的主循环看起来像这样:
for char in postfix_expression:
if char in OperatorFunctions:
stack.append(OperatorFunctions[char](stack.pop(), stack.pop()))
else:
stack.append(char)
Run Code Online (Sandbox Code Playgroud)
您需要注意确保以正确的顺序从堆栈中弹出减法和除法的操作数.