Python 3.x 这是什么<;<;的绑定方法Stack.pop__0x03C74AB0处的主堆栈对象>&燃气轮机;什么意思?
我相信这意味着您返回了Python 3.x 这是什么<;<;的绑定方法Stack.pop__0x03C74AB0处的主堆栈对象>&燃气轮机;什么意思?,python-3.x,indexoutofboundsexception,postfix-notation,Python 3.x,Indexoutofboundsexception,Postfix Notation,我相信这意味着您返回了pop方法的函数对象,而不是postfixEval末尾的值。将operanstack.pop更改为operanstack.pop()(添加括号以应用pop方法,而不是返回它) 此外,如果我没有弄错的话,'12+'.split()将在python中返回'123',因为split使用空格作为默认分隔符。如果要将字符串转换为单个字符的列表,可以将字符串转换为列表。list('12+')将返回['1','2','+'],在这种情况下,这意味着您使用的是方法对象,而不是调用它。在do
pop
方法的函数对象,而不是postfixEval
末尾的值。将operanstack.pop
更改为operanstack.pop()
(添加括号以应用pop
方法,而不是返回它)
此外,如果我没有弄错的话,
'12+'.split()
将在python中返回'123'
,因为split
使用空格作为默认分隔符。如果要将字符串转换为单个字符的列表,可以将字符串转换为列表。list('12+')
将返回['1','2','+']
,在这种情况下,这意味着您使用的是方法对象,而不是调用它。在doMath
方法中,您应该像这样使用两个变量:op1()*op2()
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+'))
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())