Python从入门到精通(第06章):循环结构与流程控制
Python从入门到精通(第06章):循环结构与流程控制
开头导语
这是本系列第06章。本文采用"知识点讲解 + 错误示例 + 正确写法 + 自测清单"的结构,目标是让你不仅能看懂,还能独立写出可运行代码。建议你边看边敲,所有示例都亲自执行一次。
章节摘要
本章围绕"循环结构与流程控制"展开,采用"错误示例 + 正确写法 + 对比说明"的学习方式。你将看到每个知识点的常见陷阱和修复路径,并通过可运行代码建立稳定的编码习惯。学完后你应能独立实现本章主题的小型程序,并具备基础排错能力。
关键词
forwhilebreakcontinueenumeraterange
学习目标
- 把本章概念讲清楚,知道"什么时候用、什么时候不用"。
- 每个知识点都能跑通代码,能看懂输出结果。
- 能独立完成本章案例,并解释关键实现步骤。
先修知识
- 已安装 Python 3.11 及以上版本。
- 会在终端执行
python命令。 - 会创建并激活虚拟环境。
环境准备
python--versionpython-mvenv .venv# Windows PowerShell.venvScriptsActivate.ps1核心知识讲解
知识点1:for循环遍历
遍历序列时优先for,语义更清晰。
错误示例(不要这样写):
foriin3:print(i)问题说明:整数不可直接迭代,会抛TypeError。
正确写法:
foritemin[1,2,3]:print(item)对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
知识点2:while循环控制
while适合未知次数的重复任务。
错误示例(不要这样写):
n=3whilen>0:print(n)问题说明:循环变量不更新会造成死循环。
正确写法:
n=3whilen>0:print(n)n-=1对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
知识点3:break与continue
break退出循环,continue跳过本轮。
错误示例(不要这样写):
foriinrange(5):ifi==2:breakifi==4:continueprint(i)问题说明:把break/continue条件写反会得到错误流程。
正确写法:
foriinrange(5):ifi==2:continueifi==4:breakprint(i)对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
知识点4:enumerate索引遍历
同时需要索引和值时,用 enumerate。
错误示例(不要这样写):
foridx,chin'abc':print(idx,ch)问题说明:未使用enumerate会因解包失败抛异常。
正确写法:
foridx,chinenumerate('abc',start=1):print(idx,ch)对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
知识点5:range用法
range 是惰性序列,适合生成数值区间。
错误示例(不要这样写):
print(range(1,10)[0])问题说明:range不是列表,部分切片/访问认知常见错误。
正确写法:
print(list(range(1,10,2)))对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
知识点6:循环+else
循环正常结束才会进入 else。
错误示例(不要这样写):
forxin[1,2,3]:ifx==2:breakelse:print('found')问题说明:for-else语义理解错误,break后不会执行else。
正确写法:
forxin[1,2,3]:ifx==9:breakelse:print('not found')对比要点:先看输入类型是否匹配,再看边界是否覆盖,最后检查异常是否可控。
练习建议:把正确写法改成函数,再补一组异常输入测试。
案例实战
本章主案例目标:围绕"循环结构与流程控制"完成一个可运行的小程序,包含输入、处理、输出三个环节。
你需要先实现最小功能,再补校验和异常处理。
defvalidate_input(value:str)->str:value=value.strip()ifnotvalue:raiseValueError('输入不能为空')returnvaluedefmain():raw=' demo 'clean=validate_input(raw)print('处理结果:',clean)if__name__=='__main__':main()扩展练习:把主案例改成函数化结构,并给每个函数写一组测试输入。你需要记录"正常输入、边界输入、异常输入"三类结果。
常见错误与排查
- 复制代码后直接运行报错:先确认缩进、引号、括号是否完整。
- 输出和预期不一致:打印中间变量,逐步定位问题环节。
- 修改一处导致多处报错:说明函数耦合过高,优先拆分函数职责。
性能与工程建议
- 先保证正确,再考虑优化。
- 每个函数尽量只做一件事,输入输出保持明确。
- 对外部输入做校验,避免脏数据进入核心逻辑。
- 写完代码后做一次"从零运行"检查,确保可复现。
本章代码自测清单(可打勾)
- 我已运行本章所有"正确写法"代码,且输出符合预期。
- 我已复现至少3个"错误示例",并能解释错误原因。
- 我已把至少2个知识点代码改写成函数版本。
- 我已补充正常输入、边界输入、异常输入三类测试数据。
- 我已给主案例增加输入校验或异常处理逻辑。
- 我已用更清晰的变量名重构至少一段示例代码。
- 我已完成扩展练习,并记录与主案例的差异。
- 我能不看文档口述本章6个知识点的用途与边界。
- 我能独立写出1个与本章主题相关的小程序。
- 我已为下一章整理了1份待补基础清单。
章末提问
- 本章最核心的三个知识点是什么?
- 哪个知识点最容易写错?你准备怎么规避?
- 本章代码示例中,哪个函数最值得复用?
- 你能说出一个边界输入示例吗?
- 为什么要做输入校验?
- 如何判断你已经掌握本章内容?
- 本章知识在真实项目中会出现在哪个环节?
- 如果重构本章案例,你先改哪一部分?
- 本章里有哪些命名可以更清晰?
- 下一章学习前你会补充什么练习?
章末答案
- 以章节中的知识点小节为准,至少能口述定义与用途。
- 通常是边界处理与异常处理,需通过测试数据覆盖。
- 输入校验与数据清洗函数最常见。
- 例如空字符串、None、超长文本、非法数字等。
- 输入校验可以拦截错误数据,减少连锁故障。
- 能脱离文档独立写出同类代码并解释原因。
- 可能在接口层、数据处理层、任务脚本层。
- 先拆分函数职责,再补单元测试。
- 优先替换含糊命名,让变量表达业务意图。
- 补做2-3个小练习,把概念变成肌肉记忆。
本章小结
- 本章重点不是"看懂",而是"能独立写出来"。
- 每个知识点都要配代码并亲手运行。
- 学会用测试输入验证代码,稳定性会明显提升。
下一章预告
下一章是第07章《函数基础与参数传递》。建议先完成本章自测清单,再进入下一章。
章节导航
- 上一篇:第05章《条件判断与分支结构》
- 下一篇:第07章《函数基础与参数传递》
版权声明
本文为《Python从入门到精通》系列连载内容,面向学习交流使用。版权归作者所有,转载需保留出处与章节信息。
