以下python代码有什么问题。
List3=[7,5,4,4,3,1,-2,-3,-5,-7]
total=0
i=6
while i>=6:
total = total + List3[i]
i=i+1
if i> len(List3):
break
print(total)
while循环不应在List3 [6] =-2处开始添加,并且当i大于列表的长度时中断。我的逻辑有什么问题? 它返回:
IndexError Traceback (most recent call last)
<ipython-input-41-7e2f7eca2eb8> in <module>()
4 i=6
5 while 6<= i:
----> 6 totaln = totaln + List3[i]
7 i=i+1
8 if i> len(List3):
IndexError: list index out of range
答案 0 :(得分:1)
我认为while
循环是错误的。 i = i+1
,如果条件应该在while
循环中。第二点是i >= len(List3)
就足够了。 i > len(List3)
将导致最后一个索引超出索引范围
答案 1 :(得分:1)
您的代码存在问题,在最后一次迭代中,第7行将变为10> 10,这将为假,因此不会中断循环。并且它将尝试访问不存在的第5行的List [10],因此它将以错误IndexError: list index out of range
中断,因为List3的长度为10,这意味着最后一个元素的索引为9。
修改后的代码将起作用
List3=[7,5,4,4,3,1,-2,-3,-5,-7]
total=0
i=6
while i>=6:
total = total + List3[i]
i=i+1
if i > len(List3) - 1:
break
print(total)
但是如果您想获得任何列表中所有负数之和的正确方法
total=0
for i in List3:
if i<0:
total += i
print(total)
答案 2 :(得分:1)
语句顺序错误,应首先检查是否没有访问超出列表末尾的元素,然后才实际访问它们:
while i>=6:
if i>= len(List3): # this moved here, also note `>=` instead of `>`
break
total = total + List3[i]
i += 1
最后,您所有的代码都可以写成简单的一行代码:
sum( List3[6:] ) # that's it!!
答案 3 :(得分:1)
在最后一次迭代中,内部if计算10> 10,该返回的值为false,因此不会中断循环。并且它继续获得List [10]-这是无效的,因此会破坏代码。
将if i> len(List3):
替换为if i>= len(List3):
。它应该可以工作
答案 4 :(得分:0)
您可以尝试
total=0
for i in list3:
if i<0:
total+=i