2016-12-02 86 views
0

我試圖完成循環陣列支持隊列的最後一種方法。我被困在調整大小的方法。任何幫助或指針表示讚賞。環形陣列支持的隊列調整大小/排隊

def resize(self, newsize): 
    assert(len(self.data) < newsize) 
    new = Queue(newsize) 
    for x in range(len(self.data)): 
     new[x] == self.data[x] 
    self.data = new 

錯誤我得到的是:

<ipython-input-31-d458e1ceda34> in <module>() 
    19 
    20 for i in range(9, 14): 
---> 21  q.enqueue(i) 
    22 
    23 for i in range(4, 14): 

    <ipython-input-28-0e6c7038d634> in enqueue(self, val) 
     9 
    10  def enqueue(self, val): 
---> 11   if self.head == (self.tail + 1) % len(self.data): 
    12    raise RuntimeError 
    13   elif self.head == -1 and self.tail == -1: 

TypeError: object of type 'Queue' has no len() 

我的排隊方法是這樣的,給我任何錯誤別處:

def enqueue(self, val): 
    if self.head == (self.tail + 1) % len(self.data): 
     raise RuntimeError 
    elif self.head == -1 and self.tail == -1: 
     self.head = 0 
     self.tail = 0 
     self.data[self.tail] = val 
    else: 
     self.tail = (self.tail + 1) % len(self.data) 
     self.data[self.tail] = val 

回答

0

Queue類需要__len__方法:

>>> class Queue: 
...  pass 
... 
>>> len(Queue()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: object of type 'Queue' has no len() 
>>> class Queue: 
...  def __len__(self): 
...   return 0 
... 
>>> len(Queue()) 
0 

當調用內置方法len時,它將在內部調用傳遞對象的__len__。如果對象沒有定義__len__,則會顯示上述示例中的錯誤。