我正在尝试为循环阵列支持的队列完成最后一个方法。我坚持使用resize方法。任何帮助或指示表示赞赏。
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()
我的enqueue方法看起来像这样,并且在其他任何地方都没有错误:
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 :(得分: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__
,则会收到错误,如上例所示。