为啥“继续”和“中断”会给出相同的结果? [关闭]

Posted

技术标签:

【中文标题】为啥“继续”和“中断”会给出相同的结果? [关闭]【英文标题】:Why does 'continue' and 'break' give the same results? [closed]为什么“继续”和“中断”会给出相同的结果? [关闭] 【发布时间】:2019-04-24 19:24:44 【问题描述】:

在我的代码中,关键字“继续”和“中断”给出相同的输出。是什么原因?

第一个代码:

x = 0
while x < 5:
    if x == 2:
        break
    print(x)
    x += 1

输出: 0 1

第二个代码:

x = 0
while x < 5:
    if x == 2:
        continue
    print(x)
    x += 1

输出: 0 1

在第一个代码中,我希望得到相同的输出。在第二个中,我希望输出是这样的: 输出: 0 1 3 4

【问题讨论】:

我建议看看 continue 做了什么,因为我不认为它做你认为它做的事情。 @brunns:你是对的,第二个永远不会终止,但是如果你在解释器中运行这段代码,你会看到 0、1,然后只是一个闪烁的光标:) 【参考方案1】:

continue 停止循环的当前迭代并立即进入循环的下一个迭代,跳过循环体的其余部分。

在您的while 循环中,主体的其余部分包括语句x += 1。所以x 永远不会变成3,它停留在2。从那时起,if x == 2: 测试始终成功,并且它不断跳过增量,并在一遍又一遍地重复该循环时卡住。

for 循环中,它会跳过循环体的剩余部分,然后从正在循环的迭代器中获取下一项。如果您将循环更改为:

for x in range(5):
    if x == 2:
        continue
    print(x)

你会得到你期望的输出。递增x 不是在循环体中完成的,而是由for 语句本身完成的。它在每次迭代开始时自动发生。所以continue 只会跳过print 语句。

【讨论】:

您能解释一下 for 循环中的“继续”关键字吗?我不认为我已经理解它在 for 循环中的作用。 我添加了关于 forwhile 的不同之处的说明。 很好的解释!我现在明白了这些差异。我需要意识到增量是由for 本身完成的,这与while 不同。谢谢!【参考方案2】:

python 中的continue 关键字告诉程序跳过循环的其余内容并跳转到下一次迭代。

在您的第二个代码中,您会注意到程序永远不会停止执行。那是因为一旦x == 2True,程序将点击continue 然后跳转到下一个迭代......它再次检查x 是否再次等于2,并将点击continue。这是一个无限循环。

【讨论】:

【参考方案3】:

break 立即退出循环,continue 停止当前迭代直接开始下一次迭代(不退出循环)。

【讨论】:

【参考方案4】:

第二个代码示例永远不会终止,因为continue 会重新启动while 循环而不增加x

【讨论】:

以上是关于为啥“继续”和“中断”会给出相同的结果? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Math.Exp 在 32 位和 64 位之间给出不同的结果,相同的输入,相同的硬件

为啥“StratifiedShuffleSplit”对数据集的每个拆分都给出相同的结果?

如果 x != x 给出相同的结果,为啥 isnan(x) 存在?

为啥我的排列算法对所有排列都给出相同的结果?

为啥 C# 'is' 运算符在比较两个布尔值时会给出正确的结果,我应该使用它吗?

为啥会这样:处理需要通过才能继续? [关闭]