退出for循环

时间:2015-02-08 11:39:15

标签: python for-loop line-breaks

我知道我在这里错过了一些非常简单的东西......但是我不能把手指放在它上面。

我的代码试图找到“数字”中项目的除数。当计数达到10时,我知道我已经找到了数字中的第一个项目,其中有10个除数...但我看不到退出循环。它只是继续打印具有10个或更多除数的数字。

我认为这是缩进,但没有。然后我在第一个for循环中移动计数器,看看是不是它,但仍然没有。

numbers = []

numbers = [i for i in range(1, 100)]

for i in range(1, 100):
    test = sum(numbers[0:i])
    count = 0   

    for j in range(1, test+1):

        if test % j == 0:
            count +=1

        if count == 10:
            print test
            break

建议?

2 个答案:

答案 0 :(得分:3)

break仅打破最内层的for循环。之后您还需要检查count == 10

for i in range(1, 100):
    test = sum(numbers[0:i])
    count = 0   

    for j in range(1, test+1):

        if test % j == 0:
            count +=1

        if count == 10:
            print test
            break # Breaks for j but not for i

    if count == 10:
        break # Breaks for i

答案 1 :(得分:1)

您必须退出for个循环。有两种选择:

1)将代码放入函数中并使用return代替break

def process_something():
    for a in items:
        for b in other_items:
            if some_condition:
                return

2)使用辅助变量检测外环也应该断开:

for a in items:
    done = False
    for b in other_items:
        if some_condition:
            done = True
            break
    if done:
        break

在您的情况下,您可以使用if count == 10:代替if done:,但我不喜欢复制“应用程序逻辑”(DRY principle),因此count == 10应该在代码只有一次。但这是一个品味问题。

3)将外圈包裹在try: / catch ...:中并引发异常,而不是break,但请不要这样做。

相关问题