2017-01-27 1 views
0

Я занимаюсь некоторыми практическими упражнениями по программированию на Python и пытаюсь реализовать очередь (используя списки). К сожалению, я получаю поведение для своей функции isempty(), которую я не понимаю. При запуске кода ниже последние две строки дают разные ответы: A дает False, а B дает True. Почему A также не дает False?Реализация очереди в Python - два метода isempty(), дающие разные ответы

class Queue: 

    def __init__(self): 
    self.items = [] 

    def push(self,item): 
    self.items.insert(0,item) 

    def pop(self): 
    return self.items.pop() 

    def size(self): 
    return len(self.items) 

    def isempty(self): 
    return self.size == 0 

q = Queue() 
q.push("a") 
q.push("b") 
print(q.pop()) 
print(q.isempty()) 
print(q.pop()) 
print(q.isempty()) # shouldn't this (A)... 
print(q.size()==0) # ...and this (B) yield the same answer? 
+5

'self.size' - это метод. 'self.size()' возвращает размер, но 'self.size' - это сам метод, а не число. –

+3

Пока ваш класс ведет себя как очередь, 'push' и' pop' - это термины, обычно связанные со стеками (которые представляют собой структуры данных LIFO). Подумайте, вместо этого используйте термины 'enqueue' и' dequeue'. – Tagc

ответ

3

Просто измените метод isempty() на:

def isempty(self): 
    return self.size() == 0 
+1

Я знал, что это должно быть что-то простое ... спасибо! –

+0

Мое удовольствие! Если ответ здесь решает вашу проблему, отметьте его как принятый, если вы не возражаете :) –

0

Ваша реализация Queue.isempty() проверяет, чтобы увидеть, если метод size равно целому числу 0, который никогда не будет правдой.

class Queue:     

    def __init__(self):   
    self.items = []   

    def push(self,item):  
    self.items.insert(0,item) 

    def pop(self):    
    return self.items.pop() 

    def size(self):    
    return len(self.items) 

    def isempty(self):   
    return self.size == 0  

q = Queue()     
print(q.size) 

Производит:

< связанный метод Queue.size из < __main __ объекта Очередь в 0x02F4EA10 > >

Самым простым решением является использование предложение Кристофера Shroba, чтобы изменить свой Queue.isempty(). для использования метода размера списка.

Смежные вопросы