上一节我们学了while循环,得自己定义变量、自己加1、自己判断条件,少写一行就死循环给你看。
这节学的for循环,简直就是循环界的自动挡——变量不用你建,数字不用你数,到点自动停。
但别高兴太早,for循环有个细节,从第一天就坑人:range(10)生成的不是1到10,而是0到9。
打印10次"你好",用while得写4行,for循环只要2行:
for n in range(10):
print(f"第{n}次你好")运行结果:
第0次你好
第1次你好
第2次你好
第3次你好
第4次你好
第5次你好
第6次你好
第7次你好
第8次你好
第9次你好看到没有?从0开始,到9结束,一共打印了10次。第一个数字就是0,不是1。这是for循环给你上的第一课。

把for n in range(10):这句话拆开看:
零件 | 代码 | 大白话 |
关键字 | for | 告诉Python:我要开始循环了 |
循环变量 | n | 当前这次取出来的值,叫啥都行 |
关键字 | in | 从哪里取 |
可迭代对象 | range(10) | 装着数字的"盒子" |
整句话翻译成人话就是:从range(10)这个盒子里,依次取出数字,每次取出的数字交给变量n,然后执行下面的代码。
range(10)其实是个简写,完整写法是range(0, 10):
# 这两种写法完全等价
for n in range(10):
print(n)
for n in range(0, 10):
print(n)这里的range(0, 10)表示生成一个从0到10的数字区间,但注意一个关键规则:
左闭右开:包含左边的0,不包含右边的10。所以最终生成的数字是 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,一共10个。
你可以把range(10)想象成一个快递柜,里面有10个格子,编号从0到9。for循环就是依次打开每个格子,把里面的东西拿出来用。
如果你想让n从1到10,得这么写:
for n in range(1, 11):
print(n)运行结果:1, 2, 3, 4, 5, 6, 7, 8, 9, 10。
为什么是11不是10?因为左闭右开——包含1,不包含11,所以最后一个数字是10。
第一次见到这个规则的人都会觉得别扭,但几乎所有编程语言都是这么设计的。记住一句话:range(1, 11)里的11,就是"到此为止,不包含我"的意思。
为了彻底搞明白,我们把for n in range(10):的执行过程一步一步拆开:
第几次循环 | 从盒子里取出 | n的值 | 执行的操作 |
第1次 | 第1个数字 | 0 | print("第0次你好") |
第2次 | 第2个数字 | 1 | print("第1次你好") |
第3次 | 第3个数字 | 2 | print("第2次你好") |
... | ... | ... | ... |
第10次 | 第10个数字 | 9 | print("第9次你好") |
第10次循环结束后,Python往盒子里一看:没东西了。于是循环自动结束。
n会变成10吗?不会。盒子里根本就没有10这个数字。取完9就收工,干脆利落。
学while循环的时候,我们得这么写:
n = 0 # 1. 自己定义变量
while n < 10: # 2. 自己写条件
print(n)
n += 1 # 3. 自己加1三件事全得自己干,少一件就出问题。
而for循环:
for n in range(10): # 变量自动创建,范围自动指定,自动加1
print(n)变量n不用你提前定义。第一次循环开始的时候,Python会自动把n创建出来,然后把盒子里的第一个数字塞给它。你直接用就行。
当然,变量不一定非得叫n,叫i、叫index、叫abc都行:
for i in range(5):
print(i)
for abc in range(3):
print(abc)都能正常运行,结果一样。
如果你在for循环结束之后,还想用n:
for n in range(10):
print(f"第{n}次你好")
print(f"循环结束了,此时n是{n}") # PyCharm会给出警告PyCharm会在第三行的n下面画一条黄色波浪线,提示:"名称n可能未定义"。
但是——这只是一个警告,不是报错。代码照样能运行,n的值是9(循环最后一次取出的值)。
为啥PyCharm要警告?因为n是for循环内部创建的变量,PyCharm觉得你应该在循环内部用它。跑出去用,不够规范。
如果你确实需要在循环外面用n,提前定义一下就能消除警告:
n = 0 # 提前定义,警告消失
for n in range(10):
print(f"第{n}次你好")
print(f"循环结束了,此时n是{n}") # 正常运行,无警告当然,如果你的代码不需要在循环外面用n,那就不用提前定义,for循环会帮你搞定。
for循环后面的in,右边不一定非得是range。只要是"盒子里的东西能一个一个取出来"的对象,都行。
这种对象有个正式名字叫可迭代对象。大白话就是:能当盒子用,东西能挨个拿。
字符串就是一个天然的盒子——里面装着一个个字符:
for m in "abcdef":
print(m)运行结果:
a
b
c
d
e
fPython把字符串"abcdef"当成一个盒子,里面有6个格子,每个格子装一个字符。for循环依次取出a、b、c、d、e、f,赋值给m,然后打印。
除了range和字符串,Python中还有很多可迭代对象——列表、元组、字典等等,后面会逐步讲到。现在先记住:能一个一个取东西的盒子,for循环就能遍历。
range(10)有10个数字,循环10次。字符串"abcdef"有6个字符,循环6次。元素个数决定循环次数,一个不多一个不少。
while循环死循环的常见原因:忘记写n += 1,条件永远成立。
for循环天然没有这个问题——盒子里东西取完就停,你不动盒子,它不会无限循环。
但如果你在循环过程中往盒子里塞东西,那就另说了。来看一个反面教材:
nums = [1, 2, 3] # 创建一个列表(盒子),里面3个数字
for i in nums: # 遍历这个列表
print(i)
nums.append(4) # 每次循环都往列表里追加一个4这段代码会无限循环——每次循环都往盒子里加一个4,盒子永远取不完,for循环永远停不下来。
所以记住:在for循环里面,别动你正在遍历的那个盒子。只要遵守这条规则,for循环几乎不可能死循环。
语法 | 含义 | 循环次数 |
for n in range(10) | 遍历0到9 | 10次 |
for n in range(0, 10) | 同上,完整写法 | 10次 |
for n in range(1, 11) | 遍历1到10 | 10次 |
for m in "abcdef" | 遍历字符串每个字符 | 6次 |
for循环和while循环都能实现循环,但适用场景不同:
while循环适合"不知道要循环多少次,满足条件就继续"的场景。代价是你得自己管变量、管条件、管加1,三件事少一件就可能出问题。
for循环适合"知道要循环多少次,或者要遍历一个容器"的场景。变量自动建、范围自动定、取完自动停,省心得多。
最后留一个问题给你思考:如果要打印1到100所有偶数,你会用for循环还是while循环?怎么写?
把答案写在评论区,我来帮你看看。
更新时间:2026-07-13
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034903号