代码之家  ›  专栏  ›  技术社区  ›  Emily

为什么“中断”不停止循环?

  •  -3
  • Emily  · 技术社区  · 7 年前
    for i in range(999*999):
        if ispalindrome(999*999-i)==True and isprime(999*999-i) == False:
            factors = listfactors(999*999-i)
            for j in range(len(factors)):
                if len(str(factors[j])) == 3 and len(str(int((999*999-i)/factors[j])))==3:
                    print(999*999-i)
                    quit()
    

    这是我的密码。我想检查这些条件是否为真,然后在找到第一个条件后停止,但它会在控制台中打印出符合条件的所有数字。我的想法是当它得到第一个数字时应该停止

    编辑:我尝试使用quit()而不是break,但这仍然不起作用,我不理解。我确实尝试了两个break语句,但都不起作用。我想知道我是否把缩进搞错了。

    2 回复  |  直到 7 年前
        1
  •  2
  •   Hubert Grzeskowiak    7 年前

    为了退出双循环,请改用函数并从函数返回。中断仅适用于最内层的循环。

    例如:

    def whatever():
        for i in range(999 * 999):
            if ispalindrome(999 * 999 - i) and not isprime(999 * 999 - i):
                factors = listfactors(999 * 999 - i)
                for j in factors:
                    if len(str(j)) == 3 and len(str(int((999 * 999 - i) / j))) == 3:
                        return 999*999-i
    
    print(whatever())
    
        2
  •  1
  •   Elodin    7 年前

    break 只会超出1级。做你想做的事情的一个更简单的方法是把它变成休伯特所说的函数。如果确实不想使用函数,可以创建另一个变量 continue 并将其设置为True,检查它在每个级别是否为True,如果为True,则中断,然后在找到答案后将其设置为False,这样当找到答案时,它将退出每个循环,因为continue不再为True。

    P、 你应该在休伯特的答案旁边打勾,因为它解决了你的问题。