Python - 所有循环中的`break`

时间:2014-01-22 20:30:52

标签: python loops python-2.7 for-loop break

我正在使用多个嵌套的for循环。在最后一个循环中有一个if语句。当评估为True时,所有for循环应该停止,但这不会发生。它只有break来自最里面的for循环,而不是它继续前进。如果遇到break语句,我需要所有循环停止。

我的代码:

for i in range(1, 1001):
    for i2 in range(i, 1001):
        for i3 in range(i2, 1001):
            if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
                print i*i2*i3
                break

4 个答案:

答案 0 :(得分:43)

你应该把你的循环放在一个函数中,然后返回:

def myfunc():
    for i in range(1, 1001):
        for i2 in range(i, 1001):
            for i3 in range(i2, 1001):
                if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
                    print i*i2*i3
                    return # Exit the function (and stop all of the loops)
myfunc() # Call the function

使用return会立即退出封闭功能。在此过程中,所有循环都将停止。

答案 1 :(得分:14)

您可以引发例外

try:
    for a in range(5):
        for b in range(5):
            if a==b==3:
                raise StopIteration
            print b
except StopIteration: pass

答案 2 :(得分:9)

为什么不使用生成器表达式:

def my_iterator()
    for i in range(1, 1001):
        for i2 in range(i, 1001):
            for i3 in range(i2, 1001):
                yield i,i2,i3

for i,i2,i3 in my_iterator():
    if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
        print i*i2*i3
        break

答案 3 :(得分:1)

不确定这是否是最干净的方式,但你可以在每个循环的顶部进行一次bool检查。

do_loop = True

for i in range(1, 1001):
    if not do_loop:
        break
    for i2 in range(i, 1001):
        # [Loop code here]
        # set do_loop to False to break parent loops