python双链表__
我似乎无法让我的len功能正常工作,我一直在尝试很多东西,但我是一个完全的初学者,所以我很确定我错过了一些非常明显的东西。这是我的密码python双链表__,python,Python,我似乎无法让我的len功能正常工作,我一直在尝试很多东西,但我是一个完全的初学者,所以我很确定我错过了一些非常明显的东西。这是我的密码 def __len__(self): if self.head is None: return 0 else: return self.size 我的想法很简单。如果双链接列表的头是None,那么它必须为空,因此返回0,否则,只返回列表的大小 然而,我得到一个假设错误,说 AssertionError: Lis
def __len__(self):
if self.head is None:
return 0
else:
return self.size
我的想法很简单。如果双链接列表的头是None,那么它必须为空,因此返回0,否则,只返回列表的大小
然而,我得到一个假设错误,说
AssertionError: List should contain 1 element, but length is 0
感谢您的帮助,提前谢谢
编辑:这是运行我的函数的代码
testList.add(14)
assert len(testList) == 1, "List should contain 1 element, but length is %r" % len(testList)
EDIT2:这是我的添加功能,我很确定它是正确的,我花了2个小时在上面
def add(self, value):
newNode = DoubleListNode(value)
if self.head is None:
self.head = newNode
self.tail = newNode
newNode.prev = None
newNode.next = None
return newNode
elif value < self.head.data:
self.head = newNode
newNode.next = self.head
newNode.prev = None
return newNode
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
else:
node = self.head
node2 = node
while node is not None and node.data < value :
node = node.next
node2 = node.prev
newNode.next = node.prev
newNode.prev = node2.next
return newNode
def添加(自身,值):
newNode=DoubleListNode(值)
如果self.head为无:
self.head=newNode
self.tail=newNode
newNode.prev=None
newNode.next=None
返回新节点
elif值self.tail.data:
self.tail=newNode
newNode.prev=self.tail
newNode.next=None
返回新节点
其他:
node=self.head
node2=节点
当node不是None且node.data<值时:
node=node.next
node2=node.prev
newNode.next=node.prev
newNode.prev=node2.next
返回新节点
您的添加
函数没有任何会增加自身大小的内容。所以它是你在\uuuu init\uuuu
中设置的,大概是0
因此,当列表实际为空时,\uuu len\uuu
返回0
,因为self.head
是None
添加元素后,它仍然返回0
,因为self.size
是0
此外,您的代码中至少还有一个问题。看看这个:
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
显然,newNode.prev
最终将指向自身,而不是前面的尾部
有很多东西可以帮助判断代码单元测试的正确性,没有进行过代码单元测试的人进行的代码审查,通过交互式可视化工具,形式证明,等等-但是你在上面工作的小时数不是这些事情之一。你的
add
函数没有任何会增加self.size的东西。所以它是你在\uuuu init\uuuu
中设置的,大概是0
因此,当列表实际为空时,\uuu len\uuu
返回0
,因为self.head
是None
添加元素后,它仍然返回0
,因为self.size
是0
此外,您的代码中至少还有一个问题。看看这个:
elif value > self.tail.data:
self.tail = newNode
newNode.prev = self.tail
newNode.next = None
return newNode
显然,newNode.prev
最终将指向自身,而不是前面的尾部
有很多东西可以帮助判断代码单元测试的正确性,没有进行过代码单元测试的人进行的代码审查,通过交互式可视化工具,形式证明,等等-但是你在上面工作的小时数不是这些事情之一。你使用此列表并得到错误的代码在哪里?你需要提供有问题的实际代码。在得到
断言错误之前,你不需要断言一些东西吗?
添加中有什么代码,那么如何修改大小
呢?在哪里定义测试列表
?你能粘贴所有的代码吗?你使用这个列表并得到那个错误的代码在哪里?你需要提供有问题的实际代码。在你得到一个AssertionError
之前你不需要断言一些东西吗?什么代码在add
中,以及大小如何修改?你在哪里定义testList
?你能粘贴所有的代码吗?它成功了,谢谢大家的帮助。我从来没有想到我的len函数的问题是因为我的add函数!!我必须学会跳出框框思考+1--我希望我能再次投票支持这样一句话:“有很多东西可以帮助判断代码的正确性……你在代码上工作的小时数不是这些东西中的一个。”它成功了,谢谢大家的帮助。我从来没有想到我的len函数的问题是因为我的add函数!!我必须学会跳出框框思考+1--我希望我能再次投票支持这样一句话:“有很多东西可以帮助判断代码的正确性……你花在代码上的时间不在其中。”