零基础学 Python 第 4 章 | for 循环与 range():让程序帮你重复干活
本章摘要
- 核心目标:学会用
for循环让程序自动重复执行任务,告别复制粘贴 - 核心知识点:
for循环语法 /range()三种用法 / 遍历字符串与列表 /break跳出 /continue跳过 / 循环搭配if判断 - 实操产出:能独立写出九九乘法表、成绩批量统计、密码尝试拦截等实用小程序
- 前置基础:第 2 章
print/ 变量 /input,第 3 章if/elif/else条件判断
写在前面
第 3 章:我们让程序学会了"思考"——遇到不同条件走不同分支。但真实场景里,一次判断往往不够用。
比如你有 30 个学生的成绩要判断及格不及格,难道要写 30 段 if?
再比如你想让程序打印 1 到 100,难道要敲 100 行 print?
这一章你会认识 Python 里最常用的一个语法——for 循环。它的作用只有一句话:让程序重复做同一件事,但每次用不同的数据。
学完这一章,你写 Python 代码的效率会突然翻好几倍。
一、for 循环:让程序帮你数数
1.1 最简单的 for 循环
先看一个直觉最强的例子:
for i in [1, 2, 3, 4, 5]:
print("第", i, "遍")
运行输出:
第 1 遍
第 2 遍
第 3 遍
第 4 遍
第 5 遍
这段代码在做什么?
for i in [1, 2, 3, 4, 5]:— 把方括号里的每个数字轮流取出来,塞进变量i- 缩进的那一行代码 — 每取一次,就执行一遍
也就是说:循环体执行了 5 次,每次 i 的值不一样。
1.2 for 循环的语法结构
for 变量名 in 可迭代对象:
循环体代码
三个必须记住的点:
- 冒号
:— 结尾必须有,写掉就报语法错 - 缩进 — 循环体必须缩进(默认 4 个空格),VS Code 会自动帮你缩
- 变量名任意 — 常用
i、j、item、num,见名知意最好
💡
i是index(索引)的缩写,是编程界几十年的约定俗成。
1.3 循环变量名换成有意义的名字
scores = [88, 76, 95, 62, 100]
for score in scores:
print("这次得了", score, "分")
score 比 i 更能说明"这个变量装的是分数"。代码越长,好命名越重要。
二、range():Python 内置的"数字生成器"
上面的例子用 [1, 2, 3, 4, 5] 这种手写列表还行,但要循环 100 次呢?总不能手敲 100 个数字。
Python 内置了一个叫 range() 的函数,专门生成连续整数序列。
2.1 range(n):生成 0 到 n-1
for i in range(5):
print(i)
输出:
0
1
2
3
4
注意两点:
- 从 0 开始,不是 1
- 到 n-1 结束,不包含 n 本身
range(5) 就是 [0, 1, 2, 3, 4],一共 5 个数。这叫左闭右开——记住这四个字,后面切片、区间都是这个规则。
2.2 range(start, stop):指定起止
for i in range(1, 6):
print(i)
输出:
1
2
3
4
5
range(1, 6) = [1, 2, 3, 4, 5]——包含起点 1,不包含终点 6。
想让循环从 1 到 100,就写 range(1, 101)。
2.3 range(start, stop, step):带步长
# 打印 0 到 10 的所有偶数
for i in range(0, 11, 2):
print(i)
输出:
0
2
4
6
8
10
第三个参数是步长,每次跳几个。步长可以是负数(倒着数):
for i in range(10, 0, -1):
print(i)
print("发射!")
输出:
10
9
8
7
6
5
4
3
2
1
发射!
一个 5 秒倒计时的雏形就有了。
2.4 range() 三种形式速查
| 写法 | 含义 | 生成的数字 |
|---|---|---|
range(5) |
0 到 4 | 0, 1, 2, 3, 4 |
range(2, 7) |
2 到 6 | 2, 3, 4, 5, 6 |
range(1, 10, 2) |
1 到 9,步长 2 | 1, 3, 5, 7, 9 |
range(10, 0, -1) |
10 到 1,倒着走 | 10, 9, 8, ..., 1 |
⚠️
range()只生成整数,不能生成小数。想要小数序列后面第 14 章会讲用numpy。
三、遍历字符串与列表
for 循环不仅能配合 range(),还能直接"翻"字符串和列表。
3.1 遍历字符串
name = "Python"
for ch in name:
print(ch)
输出:
P
y
t
h
o
n
字符串在 for 眼里就是"一个个字符组成的队列",每次循环取一个字符。
3.2 遍历列表
fruits = ["苹果", "香蕉", "橘子", "西瓜"]
for fruit in fruits:
print("我喜欢吃", fruit)
输出:
我喜欢吃 苹果
我喜欢吃 香蕉
我喜欢吃 橘子
我喜欢吃 西瓜
3.3 循环里搭配 if 判断
真正的威力在于**for + if 组合**——批量处理数据。
scores = [88, 76, 95, 62, 100, 55, 71]
for score in scores:
if score >= 60:
print(score, "及格 ✅")
else:
print(score, "不及格 ❌")
输出:
88 及格 ✅
76 及格 ✅
95 及格 ✅
62 及格 ✅
100 及格 ✅
55 不及格 ❌
71 及格 ✅
7 个学生的判断,代码只有 6 行——这就是循环的价值。
四、break 与 continue:循环的紧急开关
有时候我们不想把循环从头跑到尾——比如找到目标就想停,或者遇到脏数据想跳过。这时候需要两个关键字:break 和 continue。
4.1 break:立刻终止整个循环
# 在 1 到 100 里找第一个能被 7 整除的数
for i in range(1, 101):
if i % 7 == 0:
print("找到了:", i)
break
输出:
找到了: 7
一旦 break 执行,循环立刻结束,后面的数字不再检查。
4.2 continue:跳过本次,继续下一次
# 打印 1 到 10,但跳过所有偶数
for i in range(1, 11):
if i % 2 == 0:
continue
print(i)
输出:
1
3
5
7
9
continue 只是跳过当前这一轮的剩余代码,循环本身还在继续。
4.3 break vs continue 一图看懂
| 关键字 | 作用 | 记忆口诀 |
|---|---|---|
break |
立刻跳出整个循环 | “刹车、下车” |
continue |
跳过当前这一轮,进入下一轮 | “跳过、继续” |
五、Scratch 积木对照
Scratch 里的「重复执行 N 次」积木,就是 Python 的 for 循环。逻辑一模一样,只是形式变了。
| Scratch | Python | 说明 |
|---|---|---|
| 「重复执行 5 次」 | for i in range(5): |
循环 5 次 |
| 「重复执行到 [条件]」 | for + break |
满足条件就跳出 |
| 「对列表中每一项」 | for x in list: |
遍历列表 |

# Scratch「重复执行 10 次 → 说 你好」→ Python 对照
for i in range(10):
print("你好")
积木拖 10 次是一个循环,Python 敲两行也是一个循环,效率天差地别——这就是从图形化转到代码的收益。
六、综合实战案例:学生成绩批量统计器
6.1 需求描述
给一个班级 8 名学生的成绩列表,程序需要自动完成:
- 打印每个人的分数和及格状态
- 统计及格人数
- 计算全班平均分
- 找出最高分
6.2 完整源码
# ====== 学生成绩批量统计器 ======
scores = [88, 76, 95, 62, 100, 55, 71, 48]
# 初始化统计变量
pass_count = 0 # 及格人数
total = 0 # 总分
highest = 0 # 最高分
print("=" * 30)
print(" 班级成绩单")
print("=" * 30)
# 遍历每个分数
for index in range(len(scores)):
score = scores[index]
student_no = index + 1 # 学号从 1 开始
# 累加总分
total = total + score
# 判断及格
if score >= 60:
status = "及格 ✅"
pass_count = pass_count + 1
else:
status = "不及格 ❌"
# 更新最高分
if score > highest:
highest = score
print("学号", student_no, "|", score, "分 |", status)
# 循环结束后计算平均分
average = total / len(scores)
print("=" * 30)
print("班级总人数:", len(scores))
print("及格人数:", pass_count)
print("班级平均分:", round(average, 2))
print("班级最高分:", highest)
print("=" * 30)
6.3 运行输出
==============================
班级成绩单
==============================
学号 1 | 88 分 | 及格 ✅
学号 2 | 76 分 | 及格 ✅
学号 3 | 95 分 | 及格 ✅
学号 4 | 62 分 | 及格 ✅
学号 5 | 100 分 | 及格 ✅
学号 6 | 55 分 | 不及格 ❌
学号 7 | 71 分 | 及格 ✅
学号 8 | 48 分 | 不及格 ❌
==============================
班级总人数: 8
及格人数: 6
班级平均分: 74.38
班级最高分: 100
==============================

6.4 分步拆解
第 1 步:定义数据和统计变量
scores = [88, 76, 95, 62, 100, 55, 71, 48]
pass_count = 0
total = 0
highest = 0
三个"计数器"变量在循环开始前必须初始化为 0——否则循环里 pass_count + 1 会因为 pass_count 未定义直接报错。
第 2 步:用 range(len(scores)) 拿到"下标"
for index in range(len(scores)):
score = scores[index]
len(scores)返回列表长度,这里是 8range(8)生成0, 1, 2, ..., 7scores[index]通过下标取出对应的分数
为什么不直接 for score in scores?因为我们还需要学号(下标 + 1),直接遍历值就拿不到位置信息。
💡 后面第 6 章我们会介绍
enumerate()——同时拿到下标和值的更优雅写法。
第 3 步:循环里边判断边累加
total = total + score # 累加总分
if score >= 60:
pass_count = pass_count + 1 # 及格数 +1
if score > highest:
highest = score # 更新最高分
这就是循环最经典的用法——每次迭代都在"叠加"数据。
第 4 步:循环结束后再算平均
average = total / len(scores)
注意:平均分的计算必须写在循环外面(缩进要退回来)。如果写在循环里,就会每次都算一遍中间值,浪费又出错。
第 5 步:round() 保留两位小数
round(average, 2)
round(数字, 位数) 是 Python 内置的四舍五入函数,第二个参数指定保留几位小数。
七、常见报错速查表
| 报错信息 | 场景 | 原因 | 解决方法 |
|---|---|---|---|
SyntaxError: expected ':' |
写 for 循环 | 末尾漏了英文冒号 : |
在 range(...) 后加冒号 |
IndentationError: expected an indented block |
for 循环下一行 | 循环体没缩进 | 循环体缩进 4 个空格 |
TypeError: 'int' object is not iterable |
for i in 5: |
for 后面必须是可迭代对象(列表 / range / 字符串),不能是单个数字 | 改为 for i in range(5): |
NameError: name 'total' is not defined |
循环里累加 | 累加变量循环前没有初始化 | 循环前先写 total = 0 |
IndexError: list index out of range |
scores[index] |
下标超出了列表长度 | 检查 range 范围是否和列表长度匹配 |
TypeError: object of type 'int' has no len() |
len(88) |
len() 只能用在列表 / 字符串等,不能用在单个数字 |
检查传入的对象类型 |
八、本章小结
这一章你解锁了 Python 里最强的"重复干活"神器:
- ✅
for 变量 in 可迭代对象:— 循环基本语法 - ✅
range(n)/range(a, b)/range(a, b, step)— 三种生成数字的方式 - ✅ 遍历字符串、列表 — 一次取一个元素
- ✅
break立刻跳出、continue跳过本次 - ✅ 循环 +
if组合 — 批量处理数据的标准姿势 - ✅ 循环里累加计数 — 求和、计数、找最值的通用套路
有了 for 循环,你写 Python 从"一行一行做"进化到"一次说一遍规则,机器自己执行 N 次"——这是编程真正开始省力的分水岭。
往期回顾:
零基础学 Python 第1章 | 全平台装环境 + VS Code 配置 + 第一个 Hello World
零基础学 Python 第2章 | print 输出 + 变量赋值 + input 交互输入
零基础学 Python 第3章 | 条件判断:if / elif / else
下一章(第 5 章)会讲:
第 5 章 | while 循环与循环嵌套
for循环适合"次数已知"的场景,while循环适合"条件满足就一直做"的场景。附一个综合案例:猜数字小游戏——让程序陪你玩一把。
从"数着做"到"看条件做",你的程序会更有"随机应变"的能力。
文末资源区
| 资源 | 说明 |
|---|---|
Python 官方文档 · for 语句 |
https://docs.python.org/zh-cn/3/tutorial/controlflow.html#for-statements |
Python 官方文档 · range() 函数 |
https://docs.python.org/zh-cn/3/library/stdtypes.html#range |
| 本章配套源码 · chapter4_all.py | 关注梅雅达编程笔记,评论领资料 |
每节课都配套课后练习题与完整源码。代码报错、看不懂知识点,可在评论区粘贴问题,逐一解答!
欢迎关注梅雅达编程笔记,持续分享Python零基础学习内容
更多推荐





所有评论(0)