从堆栈python返回随机值

时间:2018-11-24 05:58:29

标签: python python-3.x random stack

我试图从堆栈中返回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()

1 个答案:

答案 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) 方法应该可以使用了。