вернуть случайные значения из стека Python - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь вернуть 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 голосов
/ 24 ноября 2018

Ошибка вызвана оператором в randomFive методе

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

, потому что self является экземпляром Stack, для которого нет __len__ метода , доступного для пользователя-определенные классы len встроенная функция пытается вызвать ее и выдает ошибку, если ее нет (больше информации на этой теме ).

Быстроисправить можно было бы изменить его на

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

, но в более долгосрочной перспективе будет лучше определить собственный метод __len__, например

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

, после этого ваш оригинальный метод randomFiveдолжно работать.

...