我,我写了一个RPN计算器,但它没有按照我的方式打印或输入。
目前它需要输入和打印如下:
5 5 +
10
我想以这种方式输入
5
5
+
=
10
到目前为止,这是我的代码:
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 stack[-1]
while True:
rp = rpn_calc(get_input((raw_input())))
print rp
我试图通过改变来修复它:
rp = rpn_calc(get_input((raw_input())))
print rp
为:
rp = [get_input(raw_input())]
但是这并不起作用,因为我没有通过rpn_calc函数传递它,因为当我这样做时我得到错误:
Traceback (most recent call last):
File "C:\Users\James\Desktop\rpn.py", line 58, in <module>
help = rpn_calc[get_input(raw_input())]
TypeError: 'function' object has no attribute '__getitem__'
答案 0 :(得分:0)
您正在使用rpn_calc()
函数,就好像使用方括号索引到序列中一样:
rpn_calc[get_input(raw_input())]
进行正确的函数调用:
rpn_calc(get_input(raw_input()))
然而,您必须重新组装程序,将tokens
上的循环替换为无限循环,要求输入每个循环迭代并将该输入视为令牌:
while True:
token = raw_input()
您可能希望查找exit
或end
令牌以摆脱循环和程序。