Python 运算符

7 投票
2 回答
1240 浏览
提问于 2025-04-15 12:44

我最近在学习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)

你需要注意,减法和除法的操作数要按照正确的顺序从栈中取出来。

撰写回答