【问题标题】:while condition ignored if for loop nested inside如果 for 循环嵌套在内部,则忽略 while 条件
【发布时间】:2020-04-21 01:48:52
【问题描述】:

我想知道为什么在 python 中尝试时:

count = 0

while count < 3:
    for i in range(40):
        count += 1

实际上并不检查 while 循环条件。而在

count = 0

for i in range(40):
    while count < 3:
        count += 1

确实如此。起初我假设在迭代完成之前可能必须忽略 while 循环。但是如果我运行 2 个不同的 for 循环

count = 0

while count < 3:
    for i in range(40):
        count += 1

    for i in range(40):
        count += 1

同样的事情发生了!计数将变为 80。我经常使用 while 循环,很惊讶我从未遇到过这种情况。 while 循环是否仅在其内容的末尾进行检查?如果是这样,我如何编写第一段代码的变体

【问题讨论】:

  • "如果是这样,我怎么能写出第一段代码的变体"变得满意。这样做是否有您正在尝试解决的特定问题
  • 我正在尝试解决一个问题。但是没有必要的格式,我应该这样做。我只是遇到了这个并且感到困惑。

标签: python for-loop while-loop


【解决方案1】:

while 循环的条件在其主体开始之前和其主体结束时进行检查。如果您将更多循环放入主体中,它们都必须在 while 循环进入下一次迭代之前完成。

如果您想在循环主体完成之前显式终止循环,则需要使用break - 但如果您在嵌套循环中,则break 只会终止最里面的循环!

如果出于某种原因您确实需要从内部循环内部结束外部循环,那么最简洁的方法是将整个内容放入一个函数中并使用return。另见:How to break out of multiple loops?

【讨论】:

  • 这与我能想到的所有具有while 声明的语言相同,FWIW。
【解决方案2】:

每次执行到该行时,都会检查 while 循环的条件。 我猜你想要这样的东西:

count = 0

for i in range(40):
    if count < 3:
        count += 1
    else:
        break

【讨论】:

    猜你喜欢
    • 2017-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    • 2019-05-11
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多