【问题标题】:Combined "if" and "while", how to break out of all nested-loops when "if" condition fulfilled?结合“if”和“while”,当“if”条件满足时如何跳出所有嵌套循环?
【发布时间】:2022-01-20 11:16:33
【问题描述】:

如果条件满足,我如何编写 Python 脚本以将 whiles 与 ifs 和 break 整个嵌套循环结合起来? 我已阅读其他主题,但无法使脚本正常工作...

当满足if 条件时,如何编写此脚本以退出或中断所有嵌套循环?

脚本:

breaker = False
while True:
  ...commands...
  if ... :
    ...commands...
    if ... :
      ...commands...
      while True:
        ...commands...
        if ... :
          if ... :
            breaker = True
            break # ...to exit all loops
        i += 1
   j -= 1
if breaker:
  break

...continue script here if `break`

【问题讨论】:

  • 将所有这些放在一个函数中,然后执行return
  • 甚至在多个函数中。如此嵌套的代码很难阅读或推理。
  • 如果我用函数和返回来写这个,会正常工作吗?

标签: python if-statement while-loop nested-loops break


【解决方案1】:

对于每个 if 语句,您需要用一个 else 来关闭它,每个人都需要一个,否则我认为代码不会起作用,最后一个 (j-=1) 我认为它必须位于您制作的最后一个(如果是断路器:)代码。

【讨论】:

    【解决方案2】:

    问题的根本原因是糟糕的源代码设计(https://refactoring.guru/smells/long-method 中描述的“难闻气味”)。根据经验:不要在一个函数中使用超过一个/两个嵌套条件(即whileifuntil,...)。尝试重构您的代码,例如显示在 Martin Fowler 的书 (https://martinfowler.com/books/refactoring.html) 或许多优秀教程中(例如 https://refactoring.guru/extract-method)。

    您会发现这将简化您的生活 - 您可以在函数中使用 return 而不是某些 break 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-12
      • 2019-10-01
      • 2013-03-14
      • 2016-08-28
      • 2020-09-02
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多