Python中for循环range(4)的else分支输出疑问及与while对比
为什么for和while循环的else分支输出不同?
先拆解for循环的执行逻辑
range(4)生成的是0, 1, 2, 3这个整数序列,for循环会逐个把序列里的值赋值给num:
- 第一次迭代:
num=0,打印0-1=-1 - 第二次迭代:
num=1,打印1-1=0 - 第三次迭代:
num=2,打印2-1=1 - 第四次迭代:
num=3,打印3-1=2
当序列里的所有元素都遍历完成后,才会触发else分支。此时num的最后一次赋值是序列的最后一个元素3,所以else里的print(num)自然输出3。你预期的4根本不会出现在for循环的num里,因为range(4)的上限是开区间,只会生成到3为止的整数。
再看while循环的执行逻辑
初始num=0,循环条件num !=4成立:
- 第一次:打印
0-1=-1,num自增为1 - 第二次:打印
1-1=0,num自增为2 - 第三次:打印
2-1=1,num自增为3 - 第四次:打印
3-1=2,num自增为4
这时候num=4,循环条件num !=4不成立,退出循环体后触发else分支。此时num的值刚好是让条件不成立的4,所以else里的print(num)输出4。
核心差异总结
- for循环:遍历的是预先生成的固定序列(比如
range(4)的0-3),循环结束后num保留序列的最后一个元素;else分支仅在**序列被完整遍历(无break中断)**时执行。 - while循环:依赖动态的条件判断,变量需要手动更新;当条件变为False时触发else分支,此时变量的值刚好是让条件失效的那个值(这里就是4)。
内容的提问来源于stack exchange,提问作者Jay B.
相关产品推荐
相关产品推荐

