零基础学 Python 第 4 章 | for 循环与 range():让程序帮你重复干活

📅 2026/7/12 19:03:33
零基础学 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循环先看一个直觉最强的例子foriin[1,2,3,4,5]:print(第,i,遍)运行输出第 1 遍 第 2 遍 第 3 遍 第 4 遍 第 5 遍这段代码在做什么for i in [1, 2, 3, 4, 5]:— 把方括号里的每个数字轮流取出来塞进变量i缩进的那一行代码 — 每取一次就执行一遍也就是说循环体执行了 5 次每次i的值不一样。1.2for循环的语法结构for变量名in可迭代对象:循环体代码三个必须记住的点冒号:— 结尾必须有写掉就报语法错缩进— 循环体必须缩进默认 4 个空格VS Code 会自动帮你缩变量名任意— 常用i、j、item、num见名知意最好i是index索引的缩写是编程界几十年的约定俗成。1.3 循环变量名换成有意义的名字scores[88,76,95,62,100]forscoreinscores:print(这次得了,score,分)score比i更能说明这个变量装的是分数。代码越长好命名越重要。二、range()Python 内置的数字生成器上面的例子用[1, 2, 3, 4, 5]这种手写列表还行但要循环 100 次呢总不能手敲 100 个数字。Python 内置了一个叫range()的函数专门生成连续整数序列。2.1range(n)生成 0 到 n-1foriinrange(5):print(i)输出0 1 2 3 4注意两点从0开始不是 1到n-1结束不包含n 本身range(5)就是[0, 1, 2, 3, 4]一共 5 个数。这叫左闭右开——记住这四个字后面切片、区间都是这个规则。2.2range(start, stop)指定起止foriinrange(1,6):print(i)输出1 2 3 4 5range(1, 6)[1, 2, 3, 4, 5]——包含起点 1不包含终点 6。想让循环从 1 到 100就写range(1, 101)。2.3range(start, stop, step)带步长# 打印 0 到 10 的所有偶数foriinrange(0,11,2):print(i)输出0 2 4 6 8 10第三个参数是步长每次跳几个。步长可以是负数倒着数foriinrange(10,0,-1):print(i)print(发射)输出10 9 8 7 6 5 4 3 2 1 发射一个 5 秒倒计时的雏形就有了。2.4range()三种形式速查写法含义生成的数字range(5)0 到 40, 1, 2, 3, 4range(2, 7)2 到 62, 3, 4, 5, 6range(1, 10, 2)1 到 9步长 21, 3, 5, 7, 9range(10, 0, -1)10 到 1倒着走10, 9, 8, ..., 1⚠️range()只生成整数不能生成小数。想要小数序列后面第 14 章会讲用numpy。三、遍历字符串与列表for循环不仅能配合range()还能直接翻字符串和列表。3.1 遍历字符串namePythonforchinname:print(ch)输出P y t h o n字符串在for眼里就是一个个字符组成的队列每次循环取一个字符。3.2 遍历列表fruits[苹果,香蕉,橘子,西瓜]forfruitinfruits:print(我喜欢吃,fruit)输出我喜欢吃 苹果 我喜欢吃 香蕉 我喜欢吃 橘子 我喜欢吃 西瓜3.3 循环里搭配if判断真正的威力在于**forif组合**——批量处理数据。scores[88,76,95,62,100,55,71]forscoreinscores:ifscore60:print(score,及格 ✅)else:print(score,不及格 ❌)输出88 及格 ✅ 76 及格 ✅ 95 及格 ✅ 62 及格 ✅ 100 及格 ✅ 55 不及格 ❌ 71 及格 ✅7 个学生的判断代码只有 6 行——这就是循环的价值。四、break与continue循环的紧急开关有时候我们不想把循环从头跑到尾——比如找到目标就想停或者遇到脏数据想跳过。这时候需要两个关键字break和continue。4.1break立刻终止整个循环# 在 1 到 100 里找第一个能被 7 整除的数foriinrange(1,101):ifi%70:print(找到了,i)break输出找到了 7一旦break执行循环立刻结束后面的数字不再检查。4.2continue跳过本次继续下一次# 打印 1 到 10但跳过所有偶数foriinrange(1,11):ifi%20:continueprint(i)输出1 3 5 7 9continue只是跳过当前这一轮的剩余代码循环本身还在继续。4.3breakvscontinue一图看懂关键字作用记忆口诀break立刻跳出整个循环“刹车、下车”continue跳过当前这一轮进入下一轮“跳过、继续”五、Scratch 积木对照Scratch 里的「重复执行 N 次」积木就是 Python 的for循环。逻辑一模一样只是形式变了。ScratchPython说明「重复执行 5 次」for i in range(5):循环 5 次「重复执行到 [条件]」for break满足条件就跳出「对列表中每一项」for x in list:遍历列表# Scratch「重复执行 10 次 → 说 你好」→ Python 对照foriinrange(10):print(你好)积木拖 10 次是一个循环Python 敲两行也是一个循环效率天差地别——这就是从图形化转到代码的收益。六、综合实战案例学生成绩批量统计器6.1 需求描述给一个班级 8 名学生的成绩列表程序需要自动完成打印每个人的分数和及格状态统计及格人数计算全班平均分找出最高分6.2 完整源码# 学生成绩批量统计器 scores[88,76,95,62,100,55,71,48]# 初始化统计变量pass_count0# 及格人数total0# 总分highest0# 最高分print(*30)print( 班级成绩单)print(*30)# 遍历每个分数forindexinrange(len(scores)):scorescores[index]student_noindex1# 学号从 1 开始# 累加总分totaltotalscore# 判断及格ifscore60:status及格 ✅pass_countpass_count1else:status不及格 ❌# 更新最高分ifscorehighest:highestscoreprint(学号,student_no,|,score,分 |,status)# 循环结束后计算平均分averagetotal/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_count0total0highest0三个计数器变量在循环开始前必须初始化为 0——否则循环里pass_count 1会因为pass_count未定义直接报错。第 2 步用range(len(scores))拿到下标forindexinrange(len(scores)):scorescores[index]len(scores)返回列表长度这里是 8range(8)生成0, 1, 2, ..., 7scores[index]通过下标取出对应的分数为什么不直接for score in scores因为我们还需要学号下标 1直接遍历值就拿不到位置信息。 后面第 6 章我们会介绍enumerate()——同时拿到下标和值的更优雅写法。第 3 步循环里边判断边累加totaltotalscore# 累加总分ifscore60:pass_countpass_count1# 及格数 1ifscorehighest:highestscore# 更新最高分这就是循环最经典的用法——每次迭代都在叠加数据。第 4 步循环结束后再算平均averagetotal/len(scores)注意平均分的计算必须写在循环外面缩进要退回来。如果写在循环里就会每次都算一遍中间值浪费又出错。第 5 步round()保留两位小数round(average,2)round(数字, 位数)是 Python 内置的四舍五入函数第二个参数指定保留几位小数。七、常见报错速查表报错信息场景原因解决方法SyntaxError: expected :写 for 循环末尾漏了英文冒号:在range(...)后加冒号IndentationError: expected an indented blockfor 循环下一行循环体没缩进循环体缩进 4 个空格TypeError: int object is not iterablefor i in 5:for 后面必须是可迭代对象列表 / range / 字符串不能是单个数字改为for i in range(5):NameError: name total is not defined循环里累加累加变量循环前没有初始化循环前先写total 0IndexError: list index out of rangescores[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 零基础入门从积木到代码》专栏序零基础学 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-statementsPython 官方文档 ·range()函数https://docs.python.org/zh-cn/3/library/stdtypes.html#range本章配套源码 · chapter4_all.py关注梅雅达编程笔记评论领资料每节课都配套课后练习题与完整源码。代码报错、看不懂知识点可在评论区粘贴问题逐一解答欢迎关注梅雅达编程笔记持续分享Python零基础学习内容