【问题标题】:Need explanation about breaking from a while loop需要关于从 while 循环中中断的解释
【发布时间】:2019-09-12 20:54:02
【问题描述】:

我实现了一个嵌套的 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))

我正在尝试根据条件构建单词列表(包括空格的单词长度应小于宽度 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

【问题讨论】:

  • 所以我不是唯一一个一直打错“pythong”的人:)
  • 这两个代码不等价。这里缺少minimal reproducible example 很难回答,但问问自己,你确定代码总是会中断吗? (因为,当代码没有达到中断时会发生什么?)

标签: python python-2.7 loops while-loop break


【解决方案1】:

如果while 条件在if 条件之前失败,则会出现差异。

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

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

【讨论】:

  • 太棒了,不知道我是怎么错过的。但是感谢您指出这一点。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 2013-10-29
    • 2021-10-27
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多