この逆ポーランド記法計算機を修正しようとしています。ほぼすべてを実行しましたが、希望どおりに印刷されず、その理由がわかりません。ソースコードは次のとおりです。
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
リストにあるので、ブラケットがそこにあるのではないかと思いますが、よくわかりません。
ありがとう!