“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 = 4
和 i = 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.0
和 Decimal(3)
。【参考方案2】:
一旦你达到 3,程序将永远不会增加 i
并将永远循环
你可以在测试前递增:
i = 0
while i < 5:
i += 1
if i == 3:
continue
print(i)
【讨论】:
您遇到了一个错误:i <= 5
应该是 i <= 4
。但是恕我直言,这使得循环范围难以阅读,而不是 1-5 它是 (0-4)+1。
... 或者你可以这样做i < 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),但由于您没有更改i
,if
条件也将始终为真。而且你的代码无限循环。
您需要在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”关键字的主要内容,如果未能解决你的问题,请参考以下文章