从堆栈返回随机值

2024-10-03 06:18:57 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: selfsizelenreturnstack堆栈defrandom
1条回答
网友
1楼 · 发布于 2024-10-03 06:18:57

错误是由randomFive方法中的语句引起的

self[random.randint(0,len(self)-1)]

因为selfStack的一个实例,它没有可用的^{} method,对于用户定义的类^{} built-in function尝试调用它,如果没有任何实例,则会引发错误(更多信息请参见this thread)。你知道吗

最快的办法就是把它改成

self[random.randint(0,len(self.stack)-1)]

但从长远来看,最好定义自己的__len__方法,比如

class Stack:
    ...
    def __len__(self):
        return len(self.stack)

在那之后,您原来的randomFive方法应该可以工作了。你知道吗

相关问题 更多 >