这一篇很重要。很多人真正开始觉得 Python “顺手”,往往就是从 for 循环开始的。
上一篇你已经学会了 while。
只要条件成立,就重复执行。 它很适合处理“什么时候停”比较明确的场景。
但 Python 里,还有另一种更常用的循环:
for
如果说 while 更像是在问:
条件还成立吗
那 for 更像是在问:
这一组东西,我要一个一个处理,怎么写更自然
比如:
把 1 到 5 依次打印出来 把一个名字里的每个字符依次取出来 把一组成绩一个个处理 把一句话里的每个字一个个读出来
你会发现,这类问题的重点不再是“条件”, 而是“一组数据”以及“逐个处理”。
这就是 for 最擅长的地方。
你可以先记住一句最核心的话:
for 循环,就是把一组东西一个一个拿出来处理。
一、什么是 for 循环
先说最直白的理解。
for 循环的作用是:
从一组数据里,依次取出每个元素,然后执行同样的代码。
你可以把它想成生活里的这种动作:
把一袋苹果一个一个拿出来检查 把名单上的名字一个一个念出来 把作业本一本一本收上来 把一句话里的每个字一个一个看过去
这些动作,本质上都很像 for。
所以 for 不是“无条件重复”, 而是“按顺序处理一组内容”。
二、先看 for 的基本结构
最基础的 for 写法长这样:
for 变量 in 一组数据: 重复执行的代码
这个结构你先别急着背, 我们直接翻译成人话:
对于这一组数据里的每一个元素, 都把它交给前面的变量, 然后执行下面缩进的代码。
是不是一下就没那么抽象了。
比如:
for char in'Python': print(char)
这句代码的人话就是:
把字符串 Python 里的字符,一个一个拿出来, 每次拿出来一个,就交给变量 char, 然后打印它。
三、先看第一个最简单的 for 例子
直接运行下面这段:
for char in'Python': print(char)
输出结果会是:
Python
这段代码特别值得你慢慢看懂。
字符串 'Python' 本身可以看成一组字符:
P y t h o n
for 每一轮都会拿出其中一个字符, 交给变量 char。
于是程序执行过程大概是这样:
第一轮,char = 'P',打印 P 第二轮,char = 'y',打印 y 第三轮,char = 't',打印 t ……
直到全部字符都拿完,循环结束。
这就是 for 最基础的运行方式。
四、for 循环里最重要的,不是语法,而是“一个一个拿出来”这个感觉
很多新手第一次看 for,容易把注意力全放在:
forin冒号 缩进
当然这些都重要。 但真正更关键的是你要建立这个感觉:
for 是在从一组东西里,一个一个取值
还是刚才这个例子:
for char in'Python': print(char)
这里不是“重复 6 次打印同一句话”。 而是:
每次拿到的 char 都不一样
所以你要慢慢形成一个很重要的直觉:
for 循环的每一轮,不一定是完全相同的 因为每次拿到的数据可能不同
这和 while 的思维其实不太一样。
五、for 里的变量名可以自己取
比如刚才我们写的是:
for char in'Python': print(char)
这里的 char 只是一个变量名。 你完全可以换成别的名字,比如:
for x in'Python': print(x)
结果完全一样。
但为什么更推荐写成 char
因为它更清楚。char 一看就知道是 character,也就是字符。 你以后读代码时,也会更容易理解。
所以一个很实用的建议是:
变量名尽量和当前拿出来的东西有关
比如遍历名字列表时可以叫 name遍历分数时可以叫 score遍历字符时可以叫 char
这样代码会清楚很多。
六、for 不只是能遍历英文字符串,中文也可以
比如:
for char in'你好世界': print(char)
输出会是:
你好世界
这说明什么。
说明 for 不在乎你这一组数据是中文还是英文。 只要它是能一个一个取出元素的内容,就可以遍历。
所以以后你处理中文文本时,for 也一样很有用。
七、for 循环特别适合处理字符串
因为字符串本来就可以看成“由一个个字符组成”。
比如你想看一段文字里到底有哪些字符, 就可以这样写:
text = input('请输入一段文字:')for char in text: print(char)
如果用户输入:
Python
程序就会逐个打印:
Python
如果用户输入:
我爱Python
程序也会一个一个处理。
这个例子特别能帮助你体会:
for 循环的重点,不是固定重复多少次 而是把一整段内容拆开,一项一项处理
八、先做一个最简单的“逐字打印”练习
这个练习特别适合现在做。
text = input('请输入一句话:')for char in text: print(char)
你可以试着输入:
你好 Python 我正在学习 Python
然后观察输出。
这个练习很有价值, 因为它会让你非常直观地感受到:
原来一整句话,在程序里真的可以被拆成一个一个字符去处理
这就是遍历思维的开始。
九、for 和 while 的区别,到这里要开始真正分清了
这是个特别重要的点。
while 更关注条件。
比如:
count = 1while count <= 5: print(count) count += 1
这里你要自己控制变量变化, 靠条件来决定什么时候停。
而 for 更关注一组数据。
比如:
for char in'Python': print(char)
这里你不用自己管“下一轮该取谁”。for 会自动帮你一个一个拿。
所以一句话总结:
while 更像“只要条件成立就继续”for 更像“把这一组内容逐个处理”
你以后写代码时, 要慢慢学会判断哪种场景更适合哪种循环。
十、for 循环里也可以写多行代码
和 if、while 一样,for 下面也不是只能写一行。
比如:
for char in'Hi': print('当前字符是:') print(char)
输出会是:
当前字符是:H当前字符是:i
这说明:
for 每一轮都会执行整个缩进代码块
而不是只执行第一句。
这个和前面学过的代码块概念是完全一致的。
十一、for 循环现在也可以配合计数变量一起用
虽然 for 本身不强调条件控制, 但你一样可以在循环内部自己维护变量。
比如:
count = 1for char in'Python': print(f'第{count}个字符是:{char}') count += 1
输出效果大概会是:
第1个字符是:P第2个字符是:y第3个字符是:t第4个字符是:h第5个字符是:o第6个字符是:n
这个例子很好, 因为它把你前面学过的变量更新和现在的 for 循环串起来了。
你会发现,知识点之间其实是会慢慢连起来的。
十二、for 现在最常见的搭档之一,就是字符串
因为当前阶段你最熟悉、最适合遍历的数据, 就是字符串。
比如下面这些都很自然:
遍历名字中的每个字:
name = '小明'for char in name: print(char)
遍历一句欢迎语:
message = '欢迎学习Python'for char in message: print(char)
遍历用户输入的一段文本:
text = input('请输入内容:')for char in text: print(char)
你现在先把字符串遍历练顺, 后面学列表、元组这些容器时,for 会更容易上手。
十三、很多人第一次学 for 时,会把 in 看得很神秘
其实不用。
在这里你可以把 in 非常朴素地理解成:
在……里面
比如:
for char in'Python': print(char)
你就可以翻译成:
对于 'Python' 里面的每一个字符,进行处理
再比如:
for char in text: print(char)
翻译成:
对于 text 里面的每一个字符,进行处理
所以 in 在 for 里,一点都不玄乎。 它就是在表达“从这一组内容里取元素”。
十四、自己做一个“统计输入次数”的小练习
虽然下一篇会专门讲 range(), 但现在我们先用最简单的固定字符串遍历,来感受 for 的节奏。
比如:
word = 'abcde'count = 0for char in word: count += 1 print(f'当前字符:{char},当前计数:{count}')
这个练习特别适合现在做。 因为它能帮你同时练到:
字符串遍历 变量累加 循环里状态变化
你会更明显地感受到:
for 不只是拿出来看看 它还能一边遍历,一边做统计
十五、for 循环里最怕的误区,不是语法,而是没理解“每轮值会变”
比如:
for char in'123': print(char)
这里每一轮的 char 都不是固定的。
第一轮是 '1'第二轮是 '2'第三轮是 '3'
这点非常关键。
因为一旦你没意识到“每轮值会变”, 你就会把 for 看成单纯的“重复执行”。 而这其实只看到了它的一半。
for 的真正价值是:
重复执行同样的处理逻辑 但每次处理的数据不一样
这个思维特别重要。
十六、while 和 for 都能重复,但适用感受不一样
现在你可以开始有一个初步判断了。
如果你更关心:
什么时候停 条件什么时候不成立 用户什么时候输对 变量什么时候到边界
那 while 往往很自然。
如果你更关心:
这一组内容里的每个元素都要处理一遍 我要一个一个拿出来 我不想自己维护条件和计数器
那 for 往往更自然。
当然,现在你还只是刚接触 for, 不需要一下子做特别精准的区分。 但这种方向感可以先慢慢建立起来。
十七、自己动手做一个“逐字欢迎用户”的练习
下面这个小练习很适合公众号读者跟着敲。
name = input('请输入你的名字:')for char in name: print(f'当前字符:{char}')
如果输入:
小明
输出会是:
当前字符:小当前字符:明
如果输入:
Python
输出就会是一个个字母。
这个练习特别能帮助你感受到:
字符串在程序里,真的是可以被拆开逐个处理的
十八、for 循环里照样要注意缩进
和前面学的所有代码块一样,for 下面的内容也是靠缩进来表示“属于循环体”的。
比如:
for char in'abc': print(char) print('这是一轮循环')
这里两句都属于循环。 每一轮都会执行两次打印。
如果你写成:
for char in'abc': print(char)print('这是一轮循环')
那后面这句就不在循环里了。 它只会在整个循环结束后执行一次。
所以你以后看 for 时, 一定要非常敏感地去看缩进。
十九、先做一个“把名字拆开显示”的综合练习
这个练习很简单,但特别适合现在做。
name = input('请输入你的名字:')print('你的名字拆开后是:')for char in name: print(char)
然后你再自己升级一下:
name = input('请输入你的名字:')count = 1print('你的名字拆开后是:')for char in name: print(f'第{count}个字符:{char}') count += 1
这个小升级很有意义。 因为你已经不只是会遍历, 而是在循环里开始做更多事了。
二十、for 循环现在还可以拿来做什么
虽然你刚入门, 但已经可以写出一些很像样的小程序了。
比如:
逐字打印一句话 统计字符串里有多少个字符 把用户名一位一位显示出来 遍历一句欢迎语做装饰输出 把输入内容逐字检查
这些都已经很实用了。
你会慢慢发现, 程序处理文本的时候,for 特别常见。
因为文本本来就天然适合被拆成字符,一个一个处理。
二十一、现在就能做的一个有趣练习:逐字打印加装饰
比如:
text = input('请输入一句话:')for char in text: print('---') print(char)
如果输入:
你好
输出可能会是:
---你---好
你也可以改成:
text = input('请输入一句话:')for char in text: print(f'【{char}】')
这类练习虽然简单, 但特别适合帮助新手建立对“逐个处理”的感觉。
二十二、今天一定要亲手完成的 3 个练习
第一个,遍历字符串。
for char in'Python': print(char)
第二个,遍历用户输入内容。
text = input('请输入一句话:')for char in text: print(char)
第三个,带计数的遍历。
word = 'hello'count = 1for char in word: print(f'第{count}个字符是:{char}') count += 1
这三个练习特别适合当前阶段。 一个练固定字符串, 一个练用户输入, 一个练循环和变量结合。
二十三、再做一个综合小练习
下面这个练习很适合作为今天的收尾。
需求:
输入一个单词或一句话,程序逐个输出其中每个字符,并告诉你当前处理的是第几个字符。
代码如下:
text = input('请输入内容:')count = 1for char in text: print(f'第{count}个字符是:{char}') count += 1
这个练习非常有代表性。 因为它把当前阶段几个很重要的点都串起来了:
输入 字符串 for 遍历 变量更新 格式化输出
你把这个练习真正跑顺, 对 for 的感觉会明显建立起来。
二十四、写在最后
for 循环这件事,初学时最重要的,不是你能不能一下子写出很复杂的遍历。 而是你有没有真正形成一种新思维:
一组内容,不一定要整体处理 也可以一个一个拿出来处理
这件事特别重要。
因为后面你学列表、字典、文件、数据分析、爬虫, 都会反复遇到“逐个处理元素”的场景。 而 for,正是 Python 里最自然、最核心的遍历方式之一。
所以这篇文章你如果只能记住一句话,我希望是:
for 循环,就是把一组东西,一个一个拿出来处理。
只要这句话你真懂了, 后面很多内容都会顺得多。
本文小结
for 循环用来逐个处理一组数据中的元素。 最基本结构是:
for 变量 in 一组数据: 重复执行的代码
当前阶段最适合用字符串来练习 for。for 和 while 的区别在于:while 更关注条件,for 更关注一组数据的逐个处理。 学习 for 最关键的,不是背格式,而是建立“每一轮拿到的数据可能不同”的遍历思维。 缩进在 for 中同样非常重要,它决定了哪些代码属于循环体。
下篇预告
第 26 篇,我们就要讲 for 最经典的搭档。
range() 的用法讲透:为什么循环总离不开它
到那一篇,你会真正明白,为什么写循环时经常会看到 range(),以及它到底在帮你做什么。