需要有关从 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
比规定的长度长,因此被添加到其中。
我实现了一个嵌套的 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
比规定的长度长,因此被添加到其中。