python结合'while循环'和'for循环'迭代数据

4 投票
4 回答
27943 浏览
提问于 2025-04-18 14:44

我正在尝试把一个 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)

撰写回答