当前位置: 首页 > news >正文

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

本章摘要

  1. 核心目标:学会用for循环让程序自动重复执行任务,告别复制粘贴
  2. 核心知识点:for循环语法 /range()三种用法 / 遍历字符串与列表 /break跳出 /continue跳过 / 循环搭配if判断
  3. 实操产出:能独立写出九九乘法表、成绩批量统计、密码尝试拦截等实用小程序
  4. 前置基础:第 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可迭代对象:循环体代码

三个必须记住的点:

  1. 冒号:— 结尾必须有,写掉就报语法错
  2. 缩进— 循环体必须缩进(默认 4 个空格),VS Code 会自动帮你缩
  3. 变量名任意— 常用ijitemnum,见名知意最好

💡iindex(索引)的缩写,是编程界几十年的约定俗成。

1.3 循环变量名换成有意义的名字

scores=[88,76,95,62,100]forscoreinscores:print("这次得了",score,"分")

scorei更能说明"这个变量装的是分数"。代码越长,好命名越重要


二、range():Python 内置的"数字生成器"

上面的例子用[1, 2, 3, 4, 5]这种手写列表还行,但要循环 100 次呢?总不能手敲 100 个数字。

Python 内置了一个叫range()的函数,专门生成连续整数序列。

2.1range(n):生成 0 到 n-1

foriinrange(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 5

range(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, 4
range(2, 7)2 到 62, 3, 4, 5, 6
range(1, 10, 2)1 到 9,步长 21, 3, 5, 7, 9
range(10, 0, -1)10 到 1,倒着走10, 9, 8, ..., 1

⚠️range()只生成整数,不能生成小数。想要小数序列后面第 14 章会讲用numpy


三、遍历字符串与列表

for循环不仅能配合range(),还能直接"翻"字符串和列表。

3.1 遍历字符串

name="Python"forchinname:print(ch)

输出:

P y t h o n

字符串在for眼里就是"一个个字符组成的队列",每次循环取一个字符。

3.2 遍历列表

fruits=["苹果","香蕉","橘子","西瓜"]forfruitinfruits:print("我喜欢吃",fruit)

输出:

我喜欢吃 苹果 我喜欢吃 香蕉 我喜欢吃 橘子 我喜欢吃 西瓜

3.3 循环里搭配if判断

真正的威力在于**for+if组合**——批量处理数据。

scores=[88,76,95,62,100,55,71]forscoreinscores:ifscore>=60:print(score,"及格 ✅")else:print(score,"不及格 ❌")

输出:

88 及格 ✅ 76 及格 ✅ 95 及格 ✅ 62 及格 ✅ 100 及格 ✅ 55 不及格 ❌ 71 及格 ✅

7 个学生的判断,代码只有 6 行——这就是循环的价值


四、breakcontinue:循环的紧急开关

有时候我们不想把循环从头跑到尾——比如找到目标就想停,或者遇到脏数据想跳过。这时候需要两个关键字:breakcontinue

4.1break:立刻终止整个循环

# 在 1 到 100 里找第一个能被 7 整除的数foriinrange(1,101):ifi%7==0:print("找到了:",i)break

输出:

找到了: 7

一旦break执行,循环立刻结束,后面的数字不再检查。

4.2continue:跳过本次,继续下一次

# 打印 1 到 10,但跳过所有偶数foriinrange(1,11):ifi%2==0:continueprint(i)

输出:

1 3 5 7 9

continue只是跳过当前这一轮的剩余代码,循环本身还在继续。

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 名学生的成绩列表,程序需要自动完成:

  1. 打印每个人的分数和及格状态
  2. 统计及格人数
  3. 计算全班平均分
  4. 找出最高分

6.2 完整源码

# ====== 学生成绩批量统计器 ======scores=[88,76,95,62,100,55,71,48]# 初始化统计变量pass_count=0# 及格人数total=0# 总分highest=0# 最高分print("="*30)print(" 班级成绩单")print("="*30)# 遍历每个分数forindexinrange(len(scores)):score=scores[index]student_no=index+1# 学号从 1 开始# 累加总分total=total+score# 判断及格ifscore>=60:status="及格 ✅"pass_count=pass_count+1else:status="不及格 ❌"# 更新最高分ifscore>highest:highest=scoreprint("学号",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=0total=0highest=0

三个"计数器"变量在循环开始前必须初始化为 0——否则循环里pass_count + 1会因为pass_count未定义直接报错。

第 2 步:用range(len(scores))拿到"下标"

forindexinrange(len(scores)):score=scores[index]
  • len(scores)返回列表长度,这里是 8
  • range(8)生成0, 1, 2, ..., 7
  • scores[index]通过下标取出对应的分数

为什么不直接for score in scores?因为我们还需要学号(下标 + 1),直接遍历值就拿不到位置信息。

💡 后面第 6 章我们会介绍enumerate()——同时拿到下标和值的更优雅写法。

第 3 步:循环里边判断边累加

total=total+score# 累加总分ifscore>=60:pass_count=pass_count+1# 及格数 +1ifscore>highest:highest=score# 更新最高分

这就是循环最经典的用法——每次迭代都在"叠加"数据

第 4 步:循环结束后再算平均

average=total/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 = 0
IndexError: 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-statements
Python 官方文档 ·range()函数https://docs.python.org/zh-cn/3/library/stdtypes.html#range
本章配套源码 · chapter4_all.py关注梅雅达编程笔记,评论领资料

每节课都配套课后练习题与完整源码。代码报错、看不懂知识点,可在评论区粘贴问题,逐一解答!
欢迎关注梅雅达编程笔记,持续分享Python零基础学习内容

http://www.jsqmd.com/news/1175703/

相关文章:

  • MVP变换
  • 1. 生产级 Agent 完整实现流程2. Agent 状态机与工作流引擎3.长对话上下文管理与压缩4. Agent 流式响应与中断控制
  • 2026年7月最新乌鲁木齐格拉苏蒂官方售后客户服务热线与维修网点地址汇总 - 亨得利钟表维修中心
  • 2026年奎屯正规优选GEO优化公司优势及选择推荐
  • 亨得利官方名表服务中心|全新维修地址及官方热线权威信息通告(2026年7月最新) - 亨得利官方博客
  • 5分钟搞定AI多语言本地化:LocalAI让你的模型说中文、日文、法文...
  • 2026年7月最新扬州伯爵官方售后客户服务电话及线下网点地址 - 亨得利钟表维修中心
  • PrimoToon高级渲染技术:光照模型、法线映射与边缘检测详解
  • 深度剖析LLMLingua三版本架构:大模型提示压缩的3大技术突破与5倍效率提升
  • 舒缓刺痛干痒面膜哪家好用:蜜妙诗缓解不适 - MXyuyu
  • 第36篇: 数据结构核心:栈与队列深度解析
  • CCManager与Devcontainer无缝集成:打造安全隔离的AI开发环境
  • 2026平洲高端翡翠门店综合实力排行名单汇总 - 互联网科技品牌测评
  • C++笔记之手写一个queue、手写一个vector、手写一个SharedPtr
  • 【AI大模型进阶】不要只会Chat:命令行里使用大模型,才是极客的浪漫
  • 深圳江诗丹顿回收价格查询与各大平台实测排行(2026年7月最新) - 诚收名表回收平台
  • 逐帧动画的 CSS 实现与 JavaScript 控制的性能对比分析
  • Vagas安全与隐私保护终极指南:如何确保职位信息安全
  • 先看节点覆盖,再看空间落地:西安豪美装修工艺/施工工艺 - 小随科技
  • 别傻了!Tkinter Python教程:GUI不是程序的命,但学它你才懂窗口的灵魂
  • 2026 年现阶段宁陵靠谱的拦污栅工厂格局重塑与选型新思路,它烂在暗处,整个水电站却因几根铁条濒临停摆 - 企业信息推荐【官方】
  • VRCX:终极VRChat社交管理助手,让虚拟社交变得如此简单
  • 再见Fable 5,OpenAI出手了!GPT-5.6真香!
  • 2026年7月最新天津真力时官方售后客服中心地址电话及服务网点分布 - 亨得利官方服务中心
  • 十、电商数仓用户行为采集平台
  • 如何用CastXML将C/C++代码转换为可分析的XML结构?
  • STM32L021与ADS122U04高精度低功耗数据采集方案
  • 如何通过CC Switch深度链接协议快速配置AI助手?终极指南
  • 2026全品类灯饰哪家靠谱 消费认可度排行盘点 - 互联网科技品牌测评
  • 先看节点覆盖,再看空间落地:西安豪美装修工艺/施工工艺 - 子柔传媒