python结合'while循环'和'for循环'迭代数据
我正在尝试把一个 while
循环和一个 for
循环结合起来,用来遍历一个列表,但我遇到了无限循环的问题。我的代码是:
l=[0,2,3,4]
lo=0
for i in range(len(l)):
while (True):
lo+=1
if lo+l[i]>40:
break
print(lo)
这段代码导致了一个无尽的循环。我希望当条件 lo + l[i]
大于 40 时,循环能够停止,并打印出最终的 lo
结果。我尝试了各种缩进方式来调整打印的那一行,但始终无法达到我想要的效果。提前谢谢大家。
4 个回答
0
试试这个:
l=[0,1,2,3,4]
lo=0
for i in l:
lo+=1
if not l[i]<3:
break
print(lo)
0
你的break语句会取消内层循环
这个代码可以正常运行:
l=[0,1,2,3,4]
stop = False
lo=0
while( not stop):
lo+=1
for i in range(len(l)):
if not l[i]<3:
stop = True
break
print(lo)
2
你不需要外部的无限循环,也不需要自己去管理索引(可以看看文档里的enumerate)。
l = [0,1,2,3,4]
for index, value in enumerate(l):
if value >= 3:
break
print(index)
我把条件从 if value not < 3:
改成了 if value >= 3:
,这样更容易理解。
5
你遇到无限循环是因为你写了一个无限循环。你可能以为 break
语句会“神奇地”知道你不仅想结束 for 循环,还想结束 while 循环。但其实 break
只会结束最里面的那个循环。所以这意味着你的代码实际上是这样运行的:
while (True): # <- infinite while loop
lo += 1
for i in range(len(l)): # <- for loop
if not l[i] < 3:
break # <- break the for loop
print(lo)
# while loop continues
如果你想同时结束两个循环,你需要明确地这样做——比如,你可以使用一个布尔变量:
keep_running = True
while (keep_running):
lo += 1
for i in range(len(l)):
if not l[i] < 3:
# this will effectively
# stop the while loop:
keep_running = False
break
print(lo)