2017-01-27 35 views
0

我正在做一些基本的Python編程實踐練習,並試圖實現一個隊列(使用列表)。不幸的是,我得到了我不明白的isempty()函數的行爲。當運行下面的代碼時,最後兩行給出了不同的答案:A產生False,而B產生True。爲什麼A不會產生假?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'通常與堆棧(這是後進先出的數據結構)相關條款。考慮使用術語'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) 

產地:

<綁定的方法< __main的Queue.size __在0x02F4EA10 > >

最簡單的辦法隊列目的是利用克里斯托弗Shroba的建議修改你的Queue.isempty()。實現使用列表的大小方法。

相關問題