我尝试使用python计算postfix expresion,但它无法工作.我想这可能是一个与python相关的问题,有什么建议吗?
expression = [12, 23, 3, '*', '+', 4, '-', 86, 2, '/', '+']
def add(a,b):
return a + b
def multi(a,b):
return a* b
def sub(a,b):
return a - b
def div(a,b):
return a/ b
def calc(opt,x,y):
calculation = {'+':lambda:add(x,y),
'*':lambda:multi(x,y),
'-':lambda:sub(x,y),
'/':lambda:div(x,y)}
return calculation[opt]()
def eval_postfix(expression):
a_list = []
for one in expression:
if type(one)==int:
a_list.append(one)
else:
y=a_list.pop()
x= a_list.pop()
r = calc(one,x,y)
a_list = a_list.append(r)
return content
print eval_postfix(expression)
Run Code Online (Sandbox Code Playgroud)
希望有人可以帮帮我!任何建议都会被批准
fal*_*tru 10
只需更换a_list = a_list.append(r)用a_list.append(r).
大多数是改变序列/映射项功能,方法不会返回None:list.sort,list.append,dict.clear...
没有直接关联,但是看看为什么list.sort()没有返回排序列表?.
该方法append不返回任何内容:
>>> l=[]
>>> print l.append(2)
None
Run Code Online (Sandbox Code Playgroud)
你不能写:
l = l.append(2)
Run Code Online (Sandbox Code Playgroud)
但简单地说:
l.append(2)
Run Code Online (Sandbox Code Playgroud)
在您的示例中,替换:
a_list = a_list.append(r)
Run Code Online (Sandbox Code Playgroud)
至
a_list.append(r)
Run Code Online (Sandbox Code Playgroud)