【问题标题】:Need help properly executing a "break" statement in python需要帮助在 python 中正确执行“break”语句
【发布时间】:2021-03-01 06:24:47
【问题描述】:

我有一些代码可以给出我想要的答案,但是一旦我得到了我就无法停止它 我想要的答案。

这是我的代码:

multiples = range(1,10)
n = 1
while n>0:
    for i in multiples:
        if n%i!=0:
            n = n + 1
            continue
        elif n%10==0:
            print(n)

这是解决 Project Euler 的problem 5 的尝试。本质上,我应该得到给定范围内所有数字的最小倍数。

现在,当我使用给出的示例运行上述代码时(1-10 应该产生 2520 作为最小倍数),我得到了正确的答案。但是,代码会继续无限运行并打印答案而不会中断。另外,当我像这样将 break 语句添加到末尾时:

multiples = range(1,10)
n = 1
while n>0:
    for i in multiples:
        if n%i!=0:
            n = n + 1
            continue
        elif n%10==0:
            print(n)
            break

代码只是不断向数字 30 发送垃圾邮件。任何想法为什么会发生这种情况。作为记录,我并不是真的在寻找这个问题的替代解决方案(毕竟目标是学习),但这些都是受欢迎的。我最想知道的是我哪里出错了。

【问题讨论】:

  • 你有嵌套循环。您只是打破了内部循环,而外部循环无限期地运行而没有满足中断条件。你可以用这个来解决它:stackoverflow.com/questions/189645/…

标签: python computation


【解决方案1】:

您永远不会跳出while 循环。 for 是整个 while 主体。 break 只中断最里面的循环;您没有离开while 循环的机制。请注意,您的 continue 不执行任何操作;它适用于 for 循环,无论如何,它即将继续,因为这是循环中的最后一条语句(在该控制流中)。

我不能真正建议对此进行修复,因为尚不清楚您希望这如何解决所述问题。不过,总的来说,我认为您有点困惑:您使用一个循环来控制n,而另一个循环来逐步处理除数,但是您没有正确地将算法跟踪到您的代码中。

【讨论】:

    【解决方案2】:

    处理这个问题的一种方法是有一个例外。充其量是定制的。

    multiples = range(1,10)
    n = 1
    
    
    class MyBreak(Exception):
        pass
    
    while n>0:
        try:
            for i in multiples:
                if n%i!=0:
                    n = n + 1
                    continue
                elif n%10==0:
                    print(n)
                    raise MyBreak()
                
        except MyBreak:
            # now you are free :)
            break
        
    
    
    

    【讨论】:

      【解决方案3】:

      有了这个brake,你只停止for循环,要退出整个循环,你应该创建触发器变量,例如:

      multiples = range(1,10)
      n = 1
      tg = 0
      while n>0:
          for i in multiples:
              if n%i!=0:
                  n = n + 1
                  continue
              elif n%10==0:
                  print(n)
                  tg = 1
                  break
          if tg != 0:
              break
      

      或者使用函数并通过返回停止循环会更好:

      def func():
          multiples = range(1,10)
          n = 1
          while n>0:
              for i in multiples:
                  if n%i!=0:
                      n = n + 1
                      continue
                  elif n%10==0:
                      print(n)
                      return n
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多