“if”和“while”循环中的“continue”关键字

Posted

技术标签:

【中文标题】“if”和“while”循环中的“continue”关键字【英文标题】:"continue" keyword inside "if" and "while" loop 【发布时间】:2021-10-08 21:04:06 【问题描述】:

我正在学习 Python。我的目标是打印出 1 到 5,跳过 3,使用 while 循环、if 语句和关键字 continue。我下面的代码只打印出 1 2,而不是 1 2 4 5。

i = 1
while i <= 5:
    if i == 3:
        continue
    print(i)
    i += 1
    为什么这个循环在 i == 3 时停止,而不是跳过 3 并继续 i = 4i = 5? 您将如何更正此代码以使其打印 1 2 4 5(继续/跳过 3)?

【问题讨论】:

它不会停止,它根本无法前进,因为您总是会跳过i += 1,而i 的值在达到3 后永远不会增加 你为什么要使用while 循环来完成这个任务?用您自己的话来说,是什么导致i 的值在您的代码中发生变化?如果continue 发生,i 会更新吗?为什么或为什么不? 【参考方案1】:

要解决这个问题,你可以这样做,当它不是三个时打印值,然后你甚至不需要使用continue

i = 1
while i <= 5:
    if i != 3:
        print(i)
    i += 1

但是,更快、更简单的解决方案是:

for i in range(1, 5 + 1):
    if i != 3:
        print(i)

或者在for循环的情况下,可以使用continue,因为for循环将继续到下一个元素:

for i in range(1, 5 + 1):
    if i == 3:
        continue
    print(i)

只是因为,但您也可以使用像这样的短(逐行)(也很快)解决方案:

print('\n'.join(str(i) for i in range(1, 5 + 1) if i != 3))

【讨论】:

呵呵,如果你想做一个没有循环的笨拙/有趣的方式,那就是:print(*filter((3).__ne__, range(1,6)), sep='\n') @jab 不要直接调用 dunder 方法。您可以改用生成器表达式:*(i for i in range(1, 6) if i!=3). 您不需要明确的join(str()),因为print() 可以为您完成:print(*(i for i in range(1, 5+1) if i!=3), sep='\n') 我的意思是我相信调用 dunder 方法一次在技术上比在每次迭代中执行查找要快。 @wjandrea:在某些情况下,我可以专门为 map/filter 使用 dunders(阅读:实际分析并需要性能,并且您对 dunder 非常了解以确保它是安全的),但是是的,它不仅丑陋,而且很脆弱。在这种情况下,它是安全的,但如果可迭代对象是一些非int 数字类型,那么当int.__ne__ 返回NotImplemented(被视为True,尽管它会变成TypeError 时,你会行为不端)在某些时候在布尔上下文中使用它)。行为不端的示例包括 3.0Decimal(3)【参考方案2】:

一旦你达到 3,程序将永远不会增加 i 并将永远循环

你可以在测试前递增:

i = 0
while i < 5:
    i += 1
    if i == 3:
        continue
    print(i)

【讨论】:

您遇到了一个错误:i &lt;= 5 应该是 i &lt;= 4。但是恕我直言,这使得循环范围难以阅读,而不是 1-5 它是 (0-4)+1 ... 或者你可以这样做i &lt; 5 感谢@mozway 的解释。我选择了您的答案,因为它保留了 while 循环、continue 关键字和 i +=1 增量的使用,这些都是我正在进行的练习的一部分。 @Cuadros 我想我已经解释过了,一旦你达到 3,你继续循环但跳过增量,因此你循环永远停留在 3【参考方案3】:

当您调用continue 时,增量将被跳过,i 将永远停留在 3

【讨论】:

那么你如何解决它? 其他答案已经提供了几种修复方法,因此请查看它们以获得一些灵感和/或修复【参考方案4】:

您的循环不会在您达到 3 时停止,而是无限期地继续,因为您总是会在 i 的值达到 3 时跳过递增 i

您需要在 continue 之前在您的 if 块中做一些事情,以确保您不会陷入无限循环。

【讨论】:

【参考方案5】:

你有一个无限循环,当你到达i == 3时,你想跳过它,你可以使用continue来完成它。 continue 表示回到while 条件并对其进行评估。

由于您没有增加i,因此该语句将始终为真(始终小于5),但由于您没有更改iif 条件也将始终为真。而且你的代码无限循环。

您需要在if 块中更改continue 之前的i 的值。

【讨论】:

【参考方案6】:

你陷入了无限循环。当你 continue 时,你永远不会增加 i,所以它永远保持 3。

【讨论】:

那么你如何解决它?【参考方案7】:

因为continue 使您无法完成其余代码。因此,您只有一个无限循环。你可以看到,如果你运行

i = 1
while i <= 5:
    if i == 3:
        print(i)
        continue
    print(i)
    i += 1

如果您想在此方法中执行此操作,您可以在继续之前增加 i,即

i = 1
while i <= 5:
    if i == 3:
        i+=1
        continue
    print(i)
    i += 1

【讨论】:

以上是关于“if”和“while”循环中的“continue”关键字的主要内容,如果未能解决你的问题,请参考以下文章

do while 循环中的 continue 语句

shell-跳出循环break和continue

Python判断循环语法

循环语句,beark语句和continue语句,请举几个例子

Javascript-JS问题:continue语句

matlab中break的用法