我试图从堆栈中返回5个值并显示出来。请问我该怎么做?
随附的是我如何解决问题的代码。
import random
class Stack:
def __init__(self):
self.stack = []
def isEmpty(self):
return self.size() == 0
def push(self, item):
self.stack.append(item)
def peek(self) :
if self.size()>0 :
return self.stack[-1]
else :
return None
def pop(self):
return self.stack.pop()
def size(self):
return len(self.stack)
def randomFive(self):
return self[random.randint(0,len(self)-1)]
list = Stack()
list.push("Tom")
list.push("John")
list.push("Peter")
list.push("Harry")
list.push("Jerry")
for i in range(0, list.size()):
five = list.randomFive()
显示的错误是:
return self[random.randint(0,len(self)-1)]
TypeError: object of type 'Stack' has no len()
答案 0 :(得分:1)
错误是由MON,TUE
方法中的语句引起的
randomFive
因为self[random.randint(0,len(self)-1)]
是self
的实例,它没有__len__
method可用,并且对于用户定义的类,len
built-in function试图调用它,如果没有,则会引发错误任何(有关更多信息,请访问this thread)。
最快的解决方法是将其更改为
Stack
但从长远的角度来看,最好像这样定义自己的self[random.randint(0,len(self.stack)-1)]
方法
__len__
之后,您原来的class Stack:
...
def __len__(self):
return len(self.stack)
方法应该可以使用了。