2017-09-20 8 views
0

比較的新しいPythonプログラマとして、私は最近、クラスとサブクラスを使用してエンキューとデキューをエミュレートしようとしました。現在、私のコードの読み取りに加えて、実行の試みを読み取りますサブクラスを使用したPythonエンキューとデキューエミュレーション

はAttributeError:「NoneType」オブジェクトはありませんがありますが、私が理解できるものから、

class queue: 
    class node: 
     def __init__(self, value, nextNode): 
      self.value = value 
      self.nextNode = nextNode 

    def __init__(self): 
     self.top = None 
     self.last = None 
     self.size = 0 

    def __len__(self): 
     return self.size 

    def enqueue(self, value): 
     #This creates an extra node with "value" and inserts at the top 
     newNode=queue.node(value,None) 
     if self.size ==0: 
      self.top=newNode 
      self.last=self.top 
      self.size+=1 
     else: 
      self.last.nextNode=newNode 
      self.last=newNode 
      self.size+=1  

    def dequeue(self): 
     #This returns self.top.value and at the same time deletes the top 
     node. 
     if self.size ==0: 
      return "error: dequeue from an empty queue" 
     elif self.size == 1: 
      val=self.top.value 
      nxt=self.top.nextNode 
      self.top=None 
      self.last=None 
     else: 
      val=self.top.value 
      nxt=self.top.nextNode 
      self.top=nxt 
     return val 

q = queue() 
q.enqueue(1) 
q.enqueue(2) 
q.enqueue(3) 
q.enqueue(4) 
x=q.dequeue() 
output = [] 
while len(q)>0: 
    x = q.dequeue() 
    output.append(x) 
print(output) 
#This should show [2, 3, 4] 

を、現在私が受け取ると、私の主な問題は、値を返します属性 '値'

私は実行しようとします。問題がどこにあるのかを誰かが明確にすることができれば、大いに感謝しています。

答えて

0

デキュー時にself.sizeを減らす必要があります。プログラムをpdbから実行すると、常に4になります。

def dequeue(self): 
    if self.size ==0: 
     return "error: dequeue from an empty queue" 
    elif self.size == 1: 
     val=self.top.value 
     nxt=self.top.nextNode 
     self.top=None 
     self.last=None 
     self.size -= 1 
    else: 
     val=self.top.value 
     next=self.top.nextNode 
     self.top=next 
     self.size 
     self.size -= 1 
    return val 
+0

うわー、私はそれを逃したとは思わない。私はデキュー・ステートメントでself.size- = 1を投げたが、確かにそれは魅力のように機能する!それを指摘してくれてありがとう! –

+0

マイケルに問題はありません。しかし、他のすべてのものといい仕事。私はちょうど2つの行に落ちた、それは私の側に魅力のように働いた。 – Kyle

関連する問題