如何在Python中中断嵌套循环?

5 投票
2 回答
1157 浏览
提问于 2025-04-20 15:14

我想知道怎么才能跳出这样的循环:

for a in range(95):
    for b in range(95):
        for c in range(95):
            for d in range(95):
                ...
                do some computings
                ...
                if condition:
                    task completed

在任务完成后,所有的循环和计算都会继续进行。它们需要被中断,但我不知道该怎么做——在“任务完成”后加一个单独的break语句只会结束最里面的for循环,但这个循环会被多次调用,所以我们并没有得到什么。

在C语言中,我可以用a=b=c=d=95来实现,但在Python中这样做就不行。当然,我可以用while循环来代替,但那样我就得用X+=1这样的语句,看起来会很糟糕。

有没有什么帮助?


关于这个循环: 我用它来通过暴力破解一个4个字符的密码。这并不是我的真实目的——只是用来测试而已。

2 个回答

4

你可以用异常来跳出嵌套的循环:

class Break(Exception): pass

try:
    for a in range(95):
        for b in range(95):
            for c in range(95):
                for d in range(95):
                    # ...
                    # do some computings
                    # ...
                    if condition:
                        # task completed
                        raise Break()
except Break:
    # do some stuff

或者使用 StopIteration

try:
    for a in range(95):
        for b in range(95):
            for c in range(95):
                for d in range(95):
                    # ...
                    # do some computings
                    # ...
                    if condition:
                        # task completed
                        raise StopIteration()
except StopIteration:
    # do some stuff
12

使用itertools库中的product函数:

from itertools import product
for a, b, c, d in product(range(95), range(95), range(95), range(95)):
    print a, b, c, d
    if a == 1: break

更简洁的写法,感谢Ashwini:

for a, b, c, d in product(range(95), repeat=4):
    print a, b, c, d
    if a == 1: break

撰写回答