2017-09-20 65 views
0

作爲一個相對較新的Python程序員,我最近試圖通過使用類和子類來模擬入隊和出隊。目前,看了我的代碼加在執行試圖讀取:使用子類的Python入隊和出隊仿真

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] 

從我能理解,我的主要問題是作爲返回值目前我得到:

AttributeError的:「NoneType」對象有沒有屬性'值'

當我嘗試運行。如果有人能夠澄清問題所在,那將不勝感激。

回答

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

邁克爾沒問題。儘管一切都很好。我只用了兩條線,就像我身邊的一個魅力一樣。 – Kyle