python将'while循环'与'for循环'结合起来迭代一些数据

时间:2014-07-25 12:29:18

标签: python

我是python的新手,也是编程的新手。我试图将'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 :(得分:1)

你得到无限循环,因为你写了无限循环。您可能认为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)

答案 1 :(得分:0)

你的休息会取消内循环

这将有效:

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 :(得分:0)

试试这个:

l=[0,1,2,3,4]
lo=0

for i in l:
    lo+=1
    if not l[i]<3:
        break
    print(lo)

答案 3 :(得分:0)

您不需要外部无限循环,并且您不必自己管理索引(请参阅文档中的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:以提高可读性。