【问题标题】:Why doesn't "break" stop this for loop?为什么“break”不停止这个for循环?
【发布时间】:2017-08-08 02:15:20
【问题描述】:
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 在哪里?
  • 我假设您使用的是quit(),因为break 不起作用。你有 2 个级别的 for 循环 break 只会突破一个级别。可能更容易将其放入函数和return
  • 哎呀,那是我尝试使用 quit() 代替的代码的更高版本。我不确定是否需要两次休息,因为我有两个循环。 quit() 应该做同样的事情,但只给我一个数字,对吧?
  • @Emily 不,使用两个中断并不能解决问题,除非使用除了一个告诉你是否匹配的变量。

标签: python-3.x for-loop break


【解决方案1】:

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

例子:

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】:

    函数break 只会跳出1级。做你想做的事的一种更简单的方法是让它成为 Hubert 所说的函数。如果你真的不想使用函数,你可以创建另一个变量continue 并将其设置为 True 并检查它是否在每个级别都不是 True,如果是这样,则在找到答案后将其设置为 False,这样,当它被发现时,它将退出每个循环,因为 continue 不再是 True。

    希望对你有帮助。

    附:您应该在 Hubert 的回答中打勾,因为它正在解决您的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-16
      • 2015-02-12
      • 1970-01-01
      • 2015-01-10
      • 2016-08-22
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多