use*_*929 4 python queue methods class
所以我有这个问题,它说创建一个类队列并使该方法出列并入队
这就是我到目前为止,有人能引导我走上正轨吗?
class queue:
def __init__(self,queue):
self.queue = []
def dequeue(self):
if len(queue) > 0:
e = queue[0]
queue = list[1:len(queue)]
else:
return "There are no elements to remove"
def enqueue(self,element):
queue.insert([-1], element)
Run Code Online (Sandbox Code Playgroud)
aba*_*ert 10
这里有一些问题.
queue它本身是指您的类,而不是具有相同名称的实例的属性self.queue.你必须一直使用self..为了避免这种混淆,给类和它的属性赋予不同的名称真的很有帮助.(这也有助于使用PEP 8样式并命名该类Queue.)e,但你永远不会return; 你刚刚离开函数的末尾,这意味着你会自动返回None.list[1:len(queue)]正在尝试切片类型list,而不是您的实际列表(self.queue).你想要的是什么self.queue[1:len(queue)].__init__接受了一个它永远不会使用的论点.您可能希望将此作为队列内容的起始值.你可能也想让它成为可选的.list.insert功能并不需要list像[-1]它的第一个参数,它需要像一个指标-1.另外,有一些事情可能更简单:
self.queue[1:],而不是使用len(self.queue).pop(0).append.if the_list,而不是if len(the_list) > 0.空集合总是假的,非空集合真实.pop将引发异常,这正是你想要做的.所以:
class Queue(object):
def __init__(self, queue=None):
if queue is None:
self.queue = []
else:
self.queue = list(queue)
def dequeue(self):
return self.queue.pop(0)
def enqueue(self, element):
self.queue.append(element)
Run Code Online (Sandbox Code Playgroud)
如果你想自定义异常,那么它说,例如,你可以用一个语句IndexError: dequeue from empty Queue来代替:IndexError: pop from empty listtry
def dequeue(self):
try:
return self.queue.pop(0)
except IndexError:
raise IndexError('dequeue from empty Queue')
Run Code Online (Sandbox Code Playgroud)
如果要测试队列类是否正常工作,则需要编写测试函数,然后调用它们.例如:
def test_queue():
q = Queue()
for i in range(10):
q.enqueue(i)
for i in range(10):
value = q.dequeue()
if value != i:
print('Value #{} should be {} but is {}'.format(i, i, value))
try:
value = q.dequeue()
except IndexError:
pass # we _want_ an error here
else:
print('#10 should raise an IndexError, but got {}'.format(value))
if __name__ == '__main__':
test_queue()
Run Code Online (Sandbox Code Playgroud)
现在您可以将文件作为脚本运行,它将运行您的测试.
在现实生活中,你会想到更完整的测试,涵盖你能想到的所有奇怪的边缘情况.您可能希望使用unittest库或第三方解决方案nose来组织和简化测试.