Python 修改反向波兰符号计算器?

Python 修改反向波兰符号计算器?,python,python-2.7,Python,Python 2.7,我正在尝试修改这个反向波兰符号计算器。我几乎已经完成了所有的工作,但是它没有按我想要的方式打印,我也不知道为什么。源代码是: def op_pow(stack): b = stack.pop(); a = stack.pop() stack.append(a ** b) def op_mul(stack): b = stack.pop(); a = stack.pop() stack.append(a * b) def op_div(stack): b =

我正在尝试修改这个反向波兰符号计算器。我几乎已经完成了所有的工作,但是它没有按我想要的方式打印,我也不知道为什么。源代码是:

def op_pow(stack):
    b = stack.pop(); a = stack.pop()
    stack.append(a ** b)
def op_mul(stack):
    b = stack.pop(); a = stack.pop()
    stack.append(a * b)
def op_div(stack):
    b = stack.pop(); a = stack.pop()
    stack.append(a / b)
def op_add(stack):
    b = stack.pop(); a = stack.pop()
    stack.append(a + b)
def op_sub(stack):
    b = stack.pop(); a = stack.pop()
    stack.append(a - b)
def op_num(stack, num):
    stack.append(num)

ops = {
 '^': op_pow,
 '*': op_mul,
 '/': op_div,
 '+': op_add,
 '-': op_sub,
 }

def get_input(inp):
    tokens = inp.strip().split()
    return tokens

def rpn_calc(tokens):
    stack = []
    table = []
    for token in tokens:
        if token in ops:
            ops[token](stack)
            table.append( (token, ' '.join(str(s) for s in stack)) )
        else:
            op_num(stack, eval(token))
            table.append( (token, ' '.join(str(s) for s in stack)) )
    return table

rp = rpn_calc(get_input((raw_input())))

print rp
如果我输入:

5 5 +
那么输出是:

[('5', '5'), ('5', '5 5'), ('+', '10')]
理想情况下,我希望输出为:

 10
我想括号可能在那里,因为它在一个列表中,但我不确定


谢谢

表似乎存储了一个包含演变状态的列表。与其从rpn_calc函数返回表,不如只返回堆栈顶部。

我该怎么做?我已通过将打印rp更改为rp中的for item来删除括号:打印项[0],','。joinmapstr,item[1:],已修复该问题。就像你说的,它现在正在打印演化状态。用返回堆栈[-1]代替返回表怎么样?非常感谢!如果你不介意我问的话,我还有一个简短的问题。是否可以更改它,使其不必在同一行上输入所有数字,例如,`5+`我可以这样做吗?您可以键入一个数字,然后输入一个数字,然后在下一行输入一个数字,然后输入和操作数,然后输入=号,它将给出答案。再次感谢!要做到这一点,您需要在调用rpn_calc之间保留堆栈,即不要每次调用rpn_calc时都将堆栈设置为[]。