Python for循环比while好在哪_不建变量不数数

上一节我们学了while循环,得自己定义变量、自己加1、自己判断条件,少写一行就死循环给你看。

这节学的for循环,简直就是循环界的自动挡——变量不用你建,数字不用你数,到点自动停。

但别高兴太早,for循环有个细节,从第一天就坑人:range(10)生成的不是1到10,而是0到9。

一、for循环长啥样:先看代码

打印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循环:每个零件啥意思

把for n in range(10):这句话拆开看:

零件

代码

大白话

关键字

for

告诉Python:我要开始循环了

循环变量

n

当前这次取出来的值,叫啥都行

关键字

in

从哪里取

可迭代对象

range(10)

装着数字的"盒子"

整句话翻译成人话就是:从range(10)这个盒子里,依次取出数字,每次取出的数字交给变量n,然后执行下面的代码。

三、range(10):一个装了0到9的盒子

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循环到底在干嘛

为了彻底搞明白,我们把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就收工,干脆利落。

五、for和while最大的区别:变量不用你建

学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)

都能正常运行,结果一样。

六、一个有趣的现象:循环外面用n会报警告

如果你在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循环不只能循环数字:字符串也行

for循环后面的in,右边不一定非得是range。只要是"盒子里的东西能一个一个取出来"的对象,都行。

这种对象有个正式名字叫可迭代对象。大白话就是:能当盒子用,东西能挨个拿。

字符串就是一个天然的盒子——里面装着一个个字符:

for m in "abcdef":
    print(m)

运行结果:

a
b
c
d
e
f

Python把字符串"abcdef"当成一个盒子,里面有6个格子,每个格子装一个字符。for循环依次取出a、b、c、d、e、f,赋值给m,然后打印。

除了range和字符串,Python中还有很多可迭代对象——列表、元组、字典等等,后面会逐步讲到。现在先记住:能一个一个取东西的盒子,for循环就能遍历

八、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循环语法总结

语法

含义

循环次数

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

标签:科技   数数   变量   你好   数字   盒子   遍历   字符串   东西   定义   代码   格子

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight All Rights Reserved.
Powered By 61893.com 闽ICP备11008920号
闽公网安备35020302034903号

Top