Python循环中自增位置对结果的影响解析:一文深入探究!
在学习 Python 的过程中,我们经常会使用 for
和 while
来构建循环。而在使用 while
循环时,很多初学者都会遇到一个问题:为什么自增语句的位置不同,程序的结果就会不一样?甚至有时候还会死循环?
今天我们就从最基础的场景开始,帮你理清楚 Python 中循环里的“自增”逻辑!
一、for i in range()
:无需自增,自动管理
在 Python 的 for
循环中,如果你写了类似:
for i in range(5):
print(i)
i += 1 # 这个加不加都没用
输出的结果是:
无论你有没有写 i += 1
,for
循环都会自己管理 i
的增值——你手动加了也不会影响 for
下一轮的值。所以,在 for
循环中完全不需要手动自增。
二、while
循环:自增必须手动控制!
不同于 for
,while
循环并不会自动更新变量。你必须手动写上 i += 1
,否则程序会一直停留在当前状态,甚至导致死循环。
变量自增在循环体内执行是我们最常见的写法。
还要注意,在循环的print() 前后插入自增,输出的结果是不同的。
i = 0
while i < 5:
print(i)
i += 1 #i=0 进入while循环之后,i小于5,被打印后,再自增,继续循环
输出的结果是:
i = 0
while i < 5:
i += 1 #i=0 进入while循环之后,i小于5,自增i之后被打印后,进行循环
print(i)
输出的结果为:
上面的两种情况,i 在进入循环时,它们的 i 的初始值都为0,区别就在于二者的自增出现在print()的先后,位置的不同所引起的差异。
i = 0
i += 1 #还未进入循环就先自增,但只会增加一次
while i < 5:
print(i)
i += 1 #打印一次i,之后将i +1之后再重新进入循环中
输出的结果为:
在最开始i=1,但是经过i+ =1之后,进入while 循环的i为1。也就是说,自增在 while 前,就跳过了最开始的值;自增在 while 内,能完整走一遍区间(在这里区间为 i < 5 )。
三、if 前自增 vs if 后自增,有什么区别?
这一点容易被忽略,但非常重要!
3.1 当自增在if前面时:
判断的是“自增后的新值”
更像是一种“预判断”:下一步要做什么,是否要做。
i = 0
while i < 5:
i += 1 #i的初始值是0,进入循环之后满足i<5,便进行自增,i=1之后被打印
if i == 3:
print("i is 3")
print(i)
输出的结果为:
3.2 自增在 if 后面:
判断的是“当前旧值”
更像是“当前分析”:现在是什么状态,判断满足条件之后,改变自变量再进行下一轮的判断。
i = 0
while i < 5:
if i == 3:
print("i is 3")
print(i)
i += 1 #i的初始值是0,进入循环之后满足i<5,i=0被打印后进行自增,再进行循环
输出的结果为:
四、如果加了 continue
,自增的位置很关键!
要是在上方的if 条件语句中加入continue,那么就需要特别注意一下,不然就会出现死循环。先来看看这个我踩过的小坑:
i = 0
while i < 5:
if i == 3:
continue
print(i)
i += 1
这段代码会发生什么?死循环!
因为当 i == 3
时,continue
会跳过后续的 i += 1
,导致 i
一直等于 3,永远无法跳出循环,程序疯狂输出 3。
解决办法:把自增写在 continue
前面:
i = 0
while i < 5:
i += 1
if i == 3:
continue
print(i)
这段代码就不会死循环,输出是:
可以看到,i == 3
的那一轮记录被 continue
跳过了,所以没有打印,但是会继续后面的循环。因此,将自增写在continue前面是最安全的,减少死循环的出现。
总结:
希望这篇文章能帮你避免自增位置而踩这些坑,彻底理解循环中的自增逻辑。关于Python的易错点在我的首页也有所总结,欢迎查看、欢迎评论区一起交流!
作者:MoSTChillax