☰
c9-python-getting-started 实战:彻底掌握 Python 的 for 与 while 循环
2026/10/15 15:14:18 网站建设 项目流程
  • 示例工程
  • 教程

【免费下载链接】c9-python-getting-started

Sample code for Channel 9 Python for Beginners course

项目地址:https://gitcode.com/gh_mirrors/c9/c9-python-getting-started
点击查看免费下载

本文基于 c9-python-getting-started 课程仓库中 12 - Loops 这一章节,系统讲解 Python 的两大核心循环结构:for循环与while循环。你将学会如何按顺序遍历列表等集合、如何使用range()生成数字序列、如何手动维护索引完成条件循环,并结合仓库中for.py、while.py、number.py等真实示例代码,掌握循环在实际项目(如遍历 API 返回的 JSON 数据)中的典型用法,最终能够在自己的程序中写出正确、高效且不易出错的循环逻辑。

一、为什么需要循环

在编程中,循环(Loop)用于重复执行一段代码。无论是遍历一个列表、逐行读取文件、还是不断轮询某个外部服务的结果,循环都是最基础、最高频的控制结构之一。在本课程的完整学习路径中,循环承接了 11 - Collections 介绍的列表、数组、字典等集合概念——集合负责"存数据",循环负责"逐个处理数据";同时它也是后续 13 - Functions 中"把重复代码封装成函数"这一思想的前置基础。

Python 提供了两种循环结构,适用场景不同:

循环结构核心语义典型场景
for循环按顺序取出集合/序列中的每个元素,赋值给指定变量遍历列表、字符串、字典键值对,或对某个数字范围逐一遍历
while循环只要条件为真,就持续执行循环体不知道要循环多少次、需要根据运行时状态判断是否继续的场景

二、for 循环:按顺序遍历集合

for循环的语法非常直观:它会按顺序取出数组或集合中的每一项,并把它赋值给你定义的循环变量,然后执行循环体。官方文档将for语句定义为"按顺序遍历序列(如列表、元组、字符串)或其它可迭代对象"的机制。

课程 README.md 给出了最经典的最小示例:

names = ['Christopher', 'Susan'] for name in names: print(name)

执行结果为依次打印两行:

Christopher Susan

仓库中对应的可运行脚本 for.py 内容几乎一致,只是将列表直接写在for语句中:

for name in ['Christopher', 'Susan']: print(name)

在这个例子里:

  • names是一个包含两个字符串元素的列表;
  • name是循环变量,第一次迭代时被赋值为'Christopher',第二次迭代时被赋值为'Susan';
  • print(name)是循环体,每次迭代都会执行一次;
  • 缩进(此处为 4 个空格或一个 Tab)决定了哪些代码属于循环体——这是 Python 语法强制要求的部分。

for循环的循环变量命名应尽量语义化:遍历人名列表就用name,遍历商品列表就用item。它和课程 09 - Handling multiple conditions 中学到的in运算符不同:in运算符用于"判断某个值是否存在于集合中",而for ... in ...用于"逐个取出集合中的值"。

遍历其它可迭代对象

for循环不仅能遍历列表,还能遍历任何"可迭代"对象,例如:

  • 字符串:for ch in 'abc':会依次取出字符'a'、'b'、'c';
  • 字典:for key in dict:会依次取出字典的键(若想同时取键和值,可用for key, value in dict.items():);
  • 文件对象:逐行读取文件内容。

这种"对任意可迭代对象统一处理"的能力,正是for循环比while循环更省心的地方——你不需要关心集合内部有多少个元素,也不需要手动维护下标。

三、range():让 for 循环按数字次数执行

很多时候我们并不关心集合中的元素,而只是想"把某段代码执行 N 次"。Python 内置的range()函数就是为此设计的,它生成一个数字序列,配合for循环使用。

仓库中的 number.py 专门演示了这一点,脚本开头用注释写明了作者的意图:

# range creates an array # First parameter is the starter # Second indicates the number of numbers to create # range(0, 2) creates [0, 1] for index in range(0, 2): print(index)

运行这段代码会打印:

0 1

关于range(start, stop)有两个要点需要准确理解:

  1. 起始值包含、结束值不包含:range(0, 2)生成[0, 1],其中2是"结束值",不会被包含在序列中。课程注释中"第二个参数表示要创建的数字个数"是一种直观描述——range(0, 2)确实创建了 2 个数字,但更严谨的语义是"从起始值开始,到结束值之前结束";
  2. 参数可以省略:range(3)等价于range(0, 3),生成[0, 1, 2];range(0, 10, 2)还可以传入第三个参数作为步长,生成[0, 2, 4, 6, 8]。

循环体内结合其它语句

range()与循环体中的任意语句都可以自由组合。课程 13 - Functions 的示例中,就使用for x in range(0, 10):让一段任务重复执行 10 次,并在每次任务前后打印时间戳以观察耗时:

for x in range(0,10): print(x) print('task completed') print(datetime.datetime.now())

注意这里print(x)位于循环体内(有缩进),而print('task completed')位于循环体之外(无缩进),因此只在循环全部结束后执行一次。缩进位置的差异直接决定了代码执行的次数,这是初学者最容易踩的坑之一。

四、while 循环:条件为真就持续执行

while循环的语义是:只要给定条件为真(True),就持续执行循环体中的操作。课程 README.md 给出了完整的索引式遍历示例:

names = ['Christopher', 'Susan'] index = 0 while index < len(names): name = names[index] print(name) index = index + 1

这段代码的运行流程:

  1. 初始化index = 0,用它记录"当前取到第几个元素";
  2. 判断条件index < len(names)(len(names)返回列表长度 2),条件为真则进入循环;
  3. 用names[index]按索引取出元素并打印;
  4. 关键一步:index = index + 1让索引递增;
  5. 再次回到第 2 步判断条件,直到index变成 2,2 < 2为假,循环结束。

仓库中对应的 while.py 实现略有简化(直接用print(names[index]),不再单独用变量承接),并在注释中特别提醒了最重要的一点:

names = ['Christopher', 'Susan'] index = 0 while index < len(names): print(names[index]) # Change the condition!! index = index + 1

注释 "Change the condition!!" 的意思是:循环体内必须修改与条件相关的变量,让条件最终能变成假,循环才能正常退出。

死循环:while 最危险的陷阱

如果删除或遗漏了index = index + 1这一行,index将永远是 0,条件0 < len(names)永远为真,程序就会无限循环下去,直到你强制终止它(例如在终端按 Ctrl+C)。这是while循环与for循环最大的区别:

  • for循环由 Python 自动管理"下一个元素",天然会遍历完所有元素后结束;
  • while循环把"何时结束"完全交给你的条件,你必须在循环体内主动推进状态(修改计数器、读取新输入、改变标志位等),确保条件最终会变为假。

什么时候优先用 while

while的价值在于处理"循环次数事先未知"的场景,例如:

  • 持续读取用户输入,直到用户输入quit;
  • 不断重试某个网络请求,直到成功或超过最大重试次数;
  • 处理数据直到某个条件成立(如指针到达文件末尾)。

这类场景用for循环很难表达,而while则非常自然:把"是否继续"的判定写成布尔条件即可。

五、循环控制:break 与 continue

除了正常结束循环,Python 还提供了两个控制关键字,帮助你在循环中途改变执行流程(这是 Python 语言的标准能力,与课程内容互补):

  • break:立即终止整个循环,跳出循环体,继续执行循环之后的代码;
  • continue:跳过本次迭代剩余的部分,直接进入下一次迭代。

典型用法示例:

names = ['Christopher', 'Susan', 'Bill'] for name in names: if name == 'Susan': break # 找到目标后提前结束循环 print(name)
for index in range(0, 10): if index % 2 == 0: continue # 偶数直接跳过 print(index) # 只打印奇数

break常与while搭配,实现"先执行、后判断"的循环模式(例如while True:配合内部break),能有效避免把复杂的终止条件堆砌在while那一行。

六、循环在真实项目中的典型应用

本课程仓库的其它章节中,循环被大量用于处理真实数据。理解这些实例,能帮你把循环从"语法练习"提升到"实战工具"。

遍历 API 返回的 JSON 数据

在 17 - JSON 章节的 Computer Vision API 调用示例中,调用 REST 接口返回的 JSON 结果里包含一个标签列表,代码正是用for循环把每个标签逐个打印出来:

# Print out all the tags in the description print() print('all tags') for item in results['description']['tags']: print(item)

results['description']['tags']是一个列表,for item in ...逐个取出其中每个元素——这正是for循环最常见的实战形态:遍历某个嵌套数据结构中的列表字段。

循环 + 函数封装重复逻辑

在 13 - Functions 中可以看到循环与函数协同的模式:循环负责"重复执行 N 次任务",函数负责"把每次都要打印的时间戳逻辑封装起来",避免代码重复。这种"循环控制重复次数、函数封装重复内容"的组合,是模块化编程的雏形。

循环 + 集合切片

结合 11 - Collections 学到的列表切片语法(names[0:2]取出前两个元素),你可以先切片筛选出子集,再用for循环遍历这个子集,形成"筛选 + 处理"的数据流水线。

七、for 还是 while?选择建议与常见错误自查

判断维度推荐用for推荐用while
遍历对象列表、字符串、字典、range 序列等可迭代对象—
循环次数事先已知或可枚举事先未知,依赖运行时状态
代码简洁度无需手动维护索引,天然防死循环需要自己管理计数器/终止条件
典型场景逐项处理数据轮询、重试、持续读取输入

常见错误自查清单:

  1. 死循环:while循环体内是否修改了条件涉及的变量?如果循环体为空或条件永不变化,程序会无限执行;
  2. 缩进错误:哪几行属于循环体?多加或漏掉缩进会导致代码执行次数完全改变;
  3. 边界错误:range(0, n)不包含n;while index < len(names)用<而不是<=,否则会越界访问names[len(names)]抛出IndexError;
  4. 循环变量未使用:如果循环变量在循环体内从未被使用,通常意味着你其实想要的是range(n)形式的"固定次数循环"。

八、动手练习

将课程 12 - Loops 目录下的三个脚本全部运行一遍,观察输出:

# 在仓库根目录执行 python "python-for-beginners/12 - Loops/for.py" python "python-for-beginners/12 - Loops/while.py" python "python-for-beginners/12 - Loops/number.py"

然后尝试以下改造,检验掌握程度:

  1. 给names列表增加第三个名字,观察for与while两个版本的输出是否同步变化;
  2. 把while.py中index = index + 1注释掉再运行,体验死循环,并用 Ctrl+C 终止;
  3. 用range(0, 10, 2)替换number.py中的range(0, 2),观察步长参数的效果;
  4. 结合上一章 11 - Collections 的字典知识,用for key in dict:遍历一个字典的所有键。

循环是 Python 所有后续进阶主题(列表推导式、生成器、异步编程、数据处理)的基石。理解for与while各自擅长的场景、牢记"while 必须手动推进条件"这条铁律,你就能写出既正确又高效的循环代码。

  • 示例工程
  • 教程

【免费下载链接】c9-python-getting-started

Sample code for Channel 9 Python for Beginners course

项目地址:https://gitcode.com/gh_mirrors/c9/c9-python-getting-started
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询