2017-01-27 3 views
0

私はいくつかの基本的なPythonプログラミングの練習をしており、リストを使ってキューを実装しようとしました。残念ながら、私が理解していないisempty()関数の動作を取得しています。下のコードを実行すると、最後の2行で異なる答えが返されます。AはFalseを返し、BはTrueを返します。なぜAもFalseを返さないのですか?Pythonでキューを実装する - 異なる答えを返す2つの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()'はsizeを返しますが、 'self.size'はメソッド自体であり、数値ではありません。 –

+3

あなたのクラスはキューのように動作しますが、 'push'と' pop'は通常スタック(LIFOデータ構造体)に関連する用語です。代わりに、 'enqueue'と' dequeue'という用語の使用を検討してください。 – Tagc

答えて

3

だけにあなたのisempty()方法を変更します。Queue.isempty()

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

私はそれが何か単純でなければならないことを知っていた...ありがとう! –

+0

私の喜び!ここの答えがあなたの問題を解決する場合は、あなたが気にしないなら受け入れたものとしてマークしてください:) –

0

あなたの実装では、メソッド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 > >

で最も簡単な解決策は、あなたのQueue.isempty()を変更するためにクリストファーShrobaの提案を使用することです。リストのサイズメソッドを使用する実装。

関連する問題