这个<bound method =“”stack.pop =“”of =“”<__ main __。stack =“”object =“”at =“”0x03c74ab0 =“”>&gt;意思?

时间:2017-03-15 08:24:04

标签: python-3.x indexoutofboundsexception postfix-notation

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+'))    

3 个答案:

答案 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())