需要有关从 while 循环中中断的解释

Need explanation about breaking from a while loop

我实现了一个嵌套的 while 循环。这是问题的源代码:

While/Break working as expected

 while length < k and i < len(words):
  # Do something
  if len(word) + length < k:
    # Check condition
  else:
    break
 output.append(formatLine(line, length, k))

我正在尝试根据条件构建单词列表(包括 space 的单词长度应小于宽度 k)。到达边界后,我需要从我正在做的内部 while 循环中断。

但是 - 如果我在休息之前将我的格式化行添加到输出列表,我不会得到预期的结果。如果我打破内部 while 循环,然后在从 while 循环出来后将该行附加到输出,我将得到与我的解决方案中一样的预期输出。

所以我的问题是 - 为什么 Python 以这种方式表现。在内部 while 循环之外初始化的变量 "line" 在 break 之前应该具有相同的值;或者如果我打破内部 while 循环并在那之后立即访问该值。但这并没有发生。

While/Break not working as you would think

 while length < k and i < len(words):
  # Do something
  if len(word) + length < k:
    # Check condition
  else:
    output.append(formatLine(line, length, k))
    break

如果 while 条件先于 if 条件失败,就会出现差异。

第一个版本总是在循环结束时执行output.append(),无论是因为条件失败还是因为break

第二个仅在循环结束时执行它,因为 if 条件失败并且您提早退出。

内部 while 循环似乎从 words 的列表中构建 line 到规定的 length。 如果该行比规定的 length 长,则为 broken,下一行继续由剩余的单词构成。

这就是为什么在从内部循环中断后附加到 output 列表会提供正确的结果。

当您在打破内部循环之前追加到 output 列表时,列表可能会遗漏一些行,因为只有 line 比规定的长度长,因此被添加到其中。