我是一个完整的编程初学者。我创建了类“队列”,向它添加了一些元素并尝试打印队列的每个元素如下,但我不能。请帮我! 提前谢谢!
已编辑格式
class queue:
def __init__(self):
self.items = []
def isempty(self):
return self.items == []
def enqueue(self,item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
def peek(self):
return self.items[len(self.items)-1]
q=queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
for n in q():
print "This time, it's: "+ str(n)
答案 0 :(得分:2)
当您创建自己的类实现时,您必须定义该类的每个行为,for
循环仅适用于iterables
并且要使您的对象可迭代,您需要定义您的类中的__iter__
方法,只要您尝试迭代对象,就会隐式调用它。
class queue:
def __init__(self):
self.items = []
def isempty(self):
return self.items == []
def enqueue(self,item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
def peek(self):
return self.items[len(self.items)-1]
def __iter__(self):
for i in self.items:
yield i
q=queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
for n in q:
print "This time, it's: "+ str(n)
答案 1 :(得分:1)
您需要定义一个__iter__
方法以使您的队列可迭代,或者您需要修改循环以使用您定义的方法。
答案 2 :(得分:1)
您正在迭代非序列类型:
for n in q():
print "This time, it's: "+ str(n)
这是正确的方法:
for n in q.items:
print "This time, it's: "+ str(n)
答案 3 :(得分:1)
此处q
是instance
类的queue
。另外q
不是callable
。items
是instance
变量。所以你必须使用
for n in q.items:
print "This time, it's: "+ str(n)
答案 4 :(得分:1)
定义__getitem__
魔术方法可能是使队列可迭代的最简单方法。
class queue:
def __init__(self):
self.items = []
def isempty(self):
return self.items == []
def enqueue(self,item):
self.items.insert(0, item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
def peek(self):
return self.items[len(self.items)-1]
def __getitem__(self, i):
return self.items[i]
q=queue()
q.enqueue(1)
q.enqueue(2)
q.enqueue(3)
for n in q:
print "This time, it's: "+ str(n)
也不要使用for n in q():
。那就是尝试将你的队列对象作为一个函数来调用。由于q
不是函数,因此失败。
作为实现__getitem__
的结果,您还可以通过索引直接在队列对象上引用队列中的元素。
e.g。
print q[0]
打印
3
答案 5 :(得分:0)
嗯,你必须将队列中的东西排队打印出来!
你的课后的代码
q=queue()
q.enqueue(3)
q.enqueue(4)
q.enqueue(55)
for n in q():
print "This time, it's: "+ str(n)
答案 6 :(得分:0)
你永远不会在队列中放任何东西。所以它是空的。因此什么都没有印刷。尝试添加一些对象(调用函数q.enqueue)然后它们可能会打印。
答案 7 :(得分:0)
在我的情况下import Queue
,上面选择的答案不起作用。
真正有效的是:
for i in q.queue:
print i