1

この逆ポーランド記法計算機を修正しようとしています。ほぼすべてを実行しましたが、希望どおりに印刷されず、その理由がわかりません。ソースコードは次のとおりです。

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

リストにあるので、ブラケットがそこにあるのではないかと思いますが、よくわかりません。

ありがとう!

4

1 に答える 1

0

テーブルは、進化する状態を含むリストを格納しているように見えます。rpn_calc 関数からテーブルを返す代わりに、スタックの一番上だけを返したいようです。

于 2013-11-13T14:31:39.480 に答える