结合“if”和“while”,当“if”条件满足时如何跳出所有嵌套循环?

Posted

技术标签:

【中文标题】结合“if”和“while”,当“if”条件满足时如何跳出所有嵌套循环?【英文标题】:Combined "if" and "while", how to break out of all nested-loops when "if" condition fulfilled? 【发布时间】: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 甚至在多个函数中。如此嵌套的代码很难阅读或推理。 如果我用函数和返回来写这个,会正常工作吗? 【参考方案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 语句。

【讨论】:

以上是关于结合“if”和“while”,当“if”条件满足时如何跳出所有嵌套循环?的主要内容,如果未能解决你的问题,请参考以下文章

while循环和if流量控制

编程while循环如果有两个不同条件该怎样设置?

Python基础语法—— 条件语句(if)+循环语句(for+while)

If Then, 满足条件时连接

判断语句和循环语句

python if 判断 while 循环 for 循环