class Stack:
def __init__(self):
self.items = []
def push(self,item):
self.items.append(item)
def pop(self):
return self.items.pop()
def isEmpty(self):
return (self.items ==[])
def __str__(self):
return str(self.items)
def postfixEval(postfixExpres):
operandStack = Stack()
tokenlist = postfixExpres.split()
for token in tokenlist:
if token in "0123456789":
operandStack.push(int(token))
else:
operand2 = operandStack.pop
operand1 = operandStack.pop
result = doMath(token,operand1,operand2)
operandStack.push(result)
return operandStack.pop
def doMath(op,op1,op2):
if op == "*":
return op1*op2
elif op == "/":
return op1/op2
elif op =="+":
return op1 + op2
elif op == "-":
return op1 - op2
print(postfixEval('12+'))
答案 0 :(得分:0)
我相信这意味着您返回了pop
方法的函数对象,而不是postfixEval
末尾的值。将operandStack.pop
更改为operandStack.pop()
(添加括号以应用pop
方法而不是返回它。)
此外,如果我没有弄错,'12+'.split()
将在python中返回'123'
,因为split
使用空格作为默认分隔符。如果要将字符串转换为单个字符列表,可以将字符串转换为列表,而list('12+')
将返回['1', '2', '+']
。
答案 1 :(得分:0)
在这种情况下,它意味着您正在使用方法对象而不是调用它。在doMath
方法中,您应该使用这两个变量:op1()*op2()
。
答案 2 :(得分:0)
class stack():
def __init__(self):
self.items=[]
def push(self,item):
self.items.append(item)
def pop(self):`
self.items.pop()
def get_stack(self):
return self.items
def emp(self):
return self.items==[]
def peek(self):
if not self.emp():
return self.items[-1]
s=stack()
print("stack is empty: ",s.emp())
s.push('a')
s.push('b')
print(s.get_stack())
s.push(12)
print(s.get_stack())
s.pop()
print(s.get_stack())
s.push('c')
print(s.get_stack())
print('peek value is: ',s.peek())
print("stack is empty: ",s.emp())