在if语句中跳出for循环

24

目前遇到了无法打破此for循环的问题。我希望如果在此列表中找不到变量,就可以使其跳过另一个for循环。它期望在for循环的顶部有缩进块,但是如果我改变break的位置或for循环的开始位置,它就无法正常工作。求助!

while cyclenumb <= 10000:

    for x in userpassword[k]:
        for z in lowercaselist:
            if x in z:
                newpasswordlist.append(z)
                k +=1
                break
        else:

    for x in userpassword[k]:
        for z in uppercaselist:
            if x in z:
                newpasswordlist.append(z)
                k +=1
                break
        else:

1
break only breaks out of the inner loop, not the outer loop. Are you sure you need the inner loops? Maybe it should just be if x in lowercaselist - Barmar
1
乍一看,您的缩进似乎不正确。第一个else是否与第一个if x in z相违背?那么它应该与第一个if缩进到相同的级别。第三个for语句是否在那个else下面?那么所有东西都应该比else再多缩进一层级。 - rajah9
lowercaselistuppercaselist的值是什么?它们是列表嵌套列表吗?当您循环遍历它们并使用x in z时,看起来像这样。 - Barmar
barmar,它们是包含字母表小写和大写的列表,例如 "a"、"b"、 - mansa
那么为什么你要使用x in z而不是直接使用x = z呢?或者你为什么不只写if x in lowercaselist:呢? - Barmar
那个可以工作,但我该怎么将它追加到新列表中呢? - mansa
1个回答

31

正如其他评论中提到的,您需要单独跳出每个循环。请注意,break只会停止它所在的那个循环。

for x in userpassword[k]:
    for z in lowercaselist:
        if x in z:
            newpasswordlist.append(z)
            k +=1
            break
    if x in z: # added an extra condition to exit the main loop
        break

你需要为两个循环都这样做。如果你也想要跳出while循环,那么在那个循环中加入if x in z: break


是的,这意味着索引对于列表来说太大了。例如,如果您有一个包含4个元素的list,并尝试获取list[5],它会报错,因为没有第5个元素。 - Tom Fuller
谢谢,我已经成功解决了索引问题。但是现在,在if语句中的最后一个k+=1 n之后添加了print newpasswordlist函数后,它会打印z的值两次。 - mansa
谢谢您,我会将这个添加到我的程序中的多个其他循环中,希望它能够正常工作。 - mansa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接