小白入门python系列12--循环for和while

小白入门python系列12--循环for和while

什么是循环?字面意思就是反复,在程序世界中,循环就是反复执行同样的代码。比如,你有100个数,要求算出它们的和,你不可能写100行的加法代码吧,这时候就要利用循环了。

for循环

for 变量 in 可迭代对象:

语句

可迭代对象,包括字符串,列表,元组等,你可以把它们想象成是由多个元素组成的队列,for in就是把队列中的元素不断的取出,先赋值给变量,然后执行语句,如此反复,直到取完所有元素,比如:

回到之前的问题,1~100的加法我们就可以这样实现:

解释下,首先定义了1个变量sum,初始值为0,range(100)会生成0~99之间的队列

>> 取出1赋值给value,在for循环内执行加法后又赋值给了sum,此时sum应该为1

>> 执行完语句后又循环,取出2赋值给value,执行加法操作后,此时sum应该为3。

>> 重复上面的操作,直至100次后

>> for循环结束后,打印sum,即最终结果。注意:print是和for循环在同一层级的,它并不是for循环内的执行语句,python代码严格遵守缩进的,写的时候千万注意。

while循环

while 表达式:

语句

它的意思是,如果表达式为假,不执行循环内的语句,如果表达式为真,执行循环内的语句,执行完语句后,重新判断表达式是否为真,如此反复。

把上面的1~100求和,我们用while循环应该是这样:

解释下,首先定义了2个变量sum和i,sum用于保存求和值,i用于保存当前算到哪个数了

>> 判断表达式1<=100,肯定为真啊,执行了2个语句后,sum应该为1,i应该为2

>> 重新判断表达式2<=100,肯定也为真,执行了2个语句后,sum应该为3,i应该为3

>> 重复上面的操作,直至100次后,while表达式为假,退出循环,执行print(sum)

总结:对于for和while循环,平时工作中for循环使用更多,推荐for循环,因为我们使用循环经常就是为了遍历元素,而for循环更易读更简洁。

循环退出

介绍完前面的2种循环,大家是不是觉得特简单呢,有些同学可能会思考:

1.如果中途想退出循环,怎么办?

2.会不会遇到无限循环,也叫做死循环?

3.如果循环正常结束,我们能不能做一些收尾工作呢?

好了,带着这些问题,我们首先介绍循环退出,这是任何编程语言都必需的东西。

break

如果你遇到某种情况,想退出整个循环,那么请使用break语句,比如:

结果为什么是55,因为i==10时,break退出了整个循环,11~100不再继续循环了,那为什么print也没执行呢,那是因为循环退出了,break后的语句被跳过。

continue

如果你遇到某种情况,想退出本轮循环,那么使用continue语句,比如:

结果为什么是5040,因为i==10时,continue提前结束了本轮循环,注意是本轮循环,11~100还要继续循环,同样地,continue后的语句也会被跳过。

继续修改,比如下面的代码,大家思考下会出现什么结果呢?

答案是死循环。因为i==10时,虽然continue结束了本轮循环,但是i=i+1会被跳过,所以下次循环时i还是10,i==10永远成立,so....死机了。

总结:break和continue的区别,break用于结束整个循环,continue用于结束本轮循环,它们后面的语句都会被跳过。

循环收尾

假如你有这么1个需求,想知道循环是否被break了,或者在循环正常结束后进行一些收尾工作,那么你需要使用for else或while else,可能平时工作中大家很少使用到,久而久之都忘了有这个玩意,但是你最好还是了解下,说不定哪时候就用上写出高逼格的代码。

while 表达式:

语句1

else:

语句2

它的意思是,只要循环没有被break过,那么在循环结束后就会执行else,否则不会执行else。

while else

注意while和else是同一级的,类似于if else,把上面代码中的continue换成break,对比一下就知道怎么回事了。

for else

和while else一模一样,不再赘述。

提升篇

嵌套循环

我们以九九乘法表为例:

第1次,第1层for循环i=1,第2层for循环会遍历range(1, i+1),第2层循环会执行1次,第2层循环执行完后,又回到第1层循环。

第2次,第1层for循环i=2,第2层for循环会遍历range(1, i+1),即1~2,第2层循环会执行2次,第2层循环执行完后,又回到第1层循环。

....

第9次,第1层for循环i=9,第2层for循环会遍历range(1, i+1),即1~9,第2层循环会执行9次,第2层循环执行完后,又回到第1层循环。至此,第1层循环结束,整个嵌套循环就结束了。

嵌套循环break和continue

九九乘法表,我们稍作修改,要求偶数列不打印,代码如下:

其中,continue只对第2层循环有效,continue只能退出它所在的本轮循环。

如果只想打印第1列,你可以这样:

其中,break只对第2层循环有效,break只能退出它所在的整个循环。

嵌套循环退出最外层循环

break只能退出它所在的那层循环,那么能不能退出到更外层循环呢?

方法1--标志位:

flag = False

for i in range(10):

for j in range(10):

if i == 5 and j == 5:

flag = True

break

if flag:

break

方法2--异常:

异常暂时没有讲到,简单的说,就是告诉python解释器运行出现了异常,后面的不能再执行了,你需要使用except捕捉到异常并处理,后面讲到了异常大家再回头看看吧。

try:

for i in range(5): # 最外层循环

print(f"Outer loop: {i}")

for j in range(5): # 内层循环

if j == 2:

raise StopOuterLoop

print(f"Inner loop: {j}")

except StopOuterLoop:

pass

finally:

print("Outer loop terminated.")

方法3--for else:

是不是有点懵逼?什么玩意?怎么那么多break、continue😂😂。好了,我来解释下,你就不会头疼啦。

当i==j==2时,内层循环break结束,与它同级的else不会执行吧(不明白的同学看下前面的for else),那么只能执行外层for循环的break,也就是最后一行那个break,这个break执行后,岂不是结束了外层循环,这样就间接退出了整个循环,get or not get?

好像漏了点什么吧,那个continue是什么鬼?如果内层循环一直没有执行break,那么else就会被执行吧,continue会对外层循环起作用,继续下一轮循环,这样不就实现了两层循环的正常嵌套执行了,就问你晕不晕😊?下来好好品味下吧,这可是装逼技能。

相关手记

如何加密局域网共享文件夹
华为p9手机怎么开启4G
lol手游亚洲和日本服务器切换指南