查看全课大纲(第 16 / 51 节)
- 1.Python 是什么?为什么值得学?
- 2.如何为 Python 编程准备一个“全家桶”环境?
- 3.Python 有哪几种执行方法?
- 4.行与缩进到底有什么用?
- 5.注释有什么用,怎么写?
- 6.变量:如何给数据起个好名字?
- 7.运算符的优先级和常见坑点是什么?
- 8.Python 中,数字和布尔值究竟有哪几种?
- 9.输入函数 `input()` 和文件读取 `open()` 怎么用?
- 10.如何将程序的结果展示给用户或保存下来?
- 11.CSV 文件怎么读怎么写才方便?
- 12.列表是什么,如何创建和访问它?
- 13.列表的修改操作,有哪些方法?
- 14.列表切片为什么能取到部分元素?排序和查找又该怎么用?
- 15.判断语句:如何让程序根据条件做不同的事?
- 16.for 循环如何遍历序列中的元素?
- 17.while 循环什么时候才会停?
- 18.while 循环的结束条件,你写对了吗?
- 19.循环中途想提前结束,怎么办?
- 20.`break` 和 `continue` 到底有什么区别?
- 21.列表推导式如何让代码更简洁高效?
- 22.字符串怎么定义、拼接和操作?
- 23.元组:为什么定义单个元素时要加逗号?
- 24.集合(set)怎么用?如何快速去重和做集合运算?
- 25.字典是什么,为什么比列表更方便?
- 26.字典的增删改查与遍历,如何避免 KeyError?
- 27.函数里的变量,为什么有的能用有的不能用?
- 28.在函数内部修改全局变量,为什么有时不生效?
- 29.函数里能修改全局变量吗?返回值怎么用?
- 30.匿名函数:如何用 lambda 快速定义简单函数?
- 31.面向对象编程是什么,为什么需要它?
- 32.类中的方法和属性到底怎么定义和使用?
- 33.如何控制对对象内部属性和方法的访问?
- 34.异常发生时,程序会怎样继续执行?
- 35.如何组织代码:包和模块
- 36.`if __name__ == '__main__'` 到底有什么用?
- 37.如何用 IDE 的 Debug 功能排查程序错误?
- 38.Matplotlib 绘图的第一步该做什么?
- 39.Figure 是什么,如何设置图形尺寸?
- 40.如何自定义 Matplotlib 的坐标轴?
- 41.如何为图表添加图例,让不同曲线一目了然?
- 42.饼图怎么画才能直观展示数据占比?
- 43.如何用 Matplotlib 绘制散点图?
- 44.柱状图怎么画?
- 45.如何使用 Matplotlib 绘制等高线图?
- 46.如何在 Matplotlib 中绘制子图?
- 47.zip 函数如何把多个列表“打包”在一起?
- 48.如何给可迭代对象加上索引?
- 49.random 模块如何生成随机数?
- 50.math 模块怎么用?
- 51.Counter 如何快速统计元素出现次数?
for 循环如何遍历序列中的元素?
约 15 分钟
小象实战讲义 · Python 编程从入门到实践
在实际编程中,我们经常需要让一段代码反复执行,以完成特定的任务,例如对一系列数据进行处理。for 循环是 Python 中实现这种重复执行逻辑的主要工具之一。本节将系统讲解 for 循环的语法、执行流程,以及如何配合 range() 函数使用。学完本节,你将能够使用 for 循环遍历列表、字典等序列,并理解其内部工作过程。
💡 核心导读
for循环的语法:for 临时变量 in 序列:,用于遍历序列中的每个元素。- 执行流程:依次从序列中取出元素,赋值给临时变量,执行循环体代码,直到序列遍历完毕。
range()函数:用于生成一个整数序列,常与for循环搭配使用,控制循环次数。- 循环嵌套:在一个
for循环内部可以再包含另一个for循环,用于处理更复杂的逻辑。
for 循环的基本语法与执行流程
for 循环的语法格式如下:
for 临时变量 in 序列:
循环体代码块- 临时变量:由用户自定义,用于在每次循环中接收序列中的当前元素。
- 序列:可以是列表、字典等可遍历的数据结构。
- 冒号与缩进:
for语句以冒号:结尾,其下方缩进的代码块即为循环体。
它的执行流程遵循以下步骤:
- 当代码执行到
for语句时,会尝试从序列中取出第一个元素。 - 如果成功取出元素,则将其赋值给临时变量,然后进入循环体执行代码。
- 循环体代码执行完毕后,程序会回到
for语句开头,尝试取出序列中的下一个元素。 - 重复步骤 2 和 3,直到序列中所有元素都被处理完毕。
- 当序列中没有下一个元素时,循环结束,程序继续执行
for循环之后的代码。
下面的例子清晰地展示了这个过程:
# 定义一个列表作为序列
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 使用 for 循环遍历列表
for i in numbers:
print(i)0
1
2
3
4
5
6
7
8
9在这个例子中,i 是临时变量,numbers 是序列。循环依次将 numbers 中的每个数字赋值给 i,然后执行 print(i),最终打印出 0 到 9。
使用 range() 函数生成序列
手动列出所有要遍历的数字(如 [0, 1, 2, ..., 9])非常繁琐。range() 函数可以方便地生成一个整数序列。
range() 函数的原型如下:
range(start, stop[, step])start:序列的起始值(包含在序列中)。如果省略,默认为 0。stop:序列的结束值(不包含在序列中)。这是必选参数。step:步长,即序列中相邻两个数字的差值。如果省略,默认为 1。
range() 生成的是一个整数序列,可以直接放在 for 的 in 后面,由循环逐个取出其中的数字。
# 生成 0 到 9 的序列(等同于 range(0, 10, 1))
for i in range(10):
print(i, end=' ')
print() # 换行
# 生成 1 到 10 的序列
for i in range(1, 11):
print(i, end=' ')
print()
# 生成 0 到 30 之间,步长为 5 的序列:0, 5, 10, 15, 20, 25
for i in range(0, 30, 5):
print(i, end=' ')
print()
# 步长也可以是负数,生成递减序列
for i in range(5, -1, -1):
print(i, end=' ')0 1 2 3 4 5 6 7 8 9
1 2 3 4 5 6 7 8 9 10
0 5 10 15 20 25
5 4 3 2 1 0 重要特性:
- 左闭右开:
range(start, stop)生成的序列包含start,但不包含stop。这是 Python 中一个常见的约定。 - 空序列:如果
start大于等于stop且步长为正,或者start小于等于stop且步长为负,range()将生成一个空序列,for循环不会执行。
循环嵌套示例:寻找素数
for 循环可以嵌套使用,即在一个循环体内部再写一个 for 循环。一个经典的例子是用两重循环逐个检查因子,找出 100 以内的所有素数(只能被 1 和自身整除的大于1的自然数)。
# 步骤1:初始化一个长度为100的列表,假设所有数都是素数(True)
is_prime = [True] * 100
# 0和1不是素数
is_prime[0] = is_prime[1] = False
# 步骤2:从2开始遍历到99
for i in range(2, 100):
# 步骤3:对于每个数i,遍历从2到i-1的所有可能因子j
for j in range(2, i):
# 步骤4:如果i能被j整除,则i不是素数
if i % j == 0:
is_prime[i] = False
# 步骤5:输出所有标记为素数的数
print("100以内的素数有:")
for i in range(2, 100):
if is_prime[i]:
print(i, end=' ')100以内的素数有:
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 代码逻辑解析:
- 创建一个布尔列表
is_prime,索引代表数字,值代表该数字是否为素数的假设。 - 外层循环
i遍历所有待检查的数字(2 到 99)。 - 内层循环
j遍历所有可能整除i的因子(2 到 i-1)。 - 如果
i % j == 0成立,说明i能被j整除,不是素数,将is_prime[i]设为False。 - 最后,遍历
is_prime列表,打印出所有值仍为True的索引,即为素数。
📝 动手练一练
- 计算累加和:使用
for循环和range()函数,计算 1 到 100 之间所有整数的和。
👉 点击查看参考答案
思路:初始化一个变量用于保存总和。使用 for 循环遍历 range(1, 101),将每个数加到总和变量上。
total = 0
for num in range(1, 101):
total += num
print("1到100的和是:{}".format(total))1到100的和是:5050常见错误
| 错误写法 | 现象或报错 | 原因 | 正确写法 |
|---|---|---|---|
for i in range(10):print(i) | IndentationError: expected an indented block after 'for' statement on line 1 | for 循环体必须缩进。print(i) 与 for 语句对齐,Python 认为循环体为空。 | for i in range(10):print(i) |
for i in range(5, 1):print(i) | 无输出 | range(5, 1) 默认步长为 1,起始值大于结束值,生成空序列。循环一次也不执行。 | for i in range(5, 1, -1):print(i) |
for i in range(10)print(i) | SyntaxError: expected ':' | for 语句末尾缺少了冒号 :。 | for i in range(10):print(i) |
my_list = [1, 2, 3]for i in mylist:print(i) | NameError: name 'mylist' is not defined. Did you mean: 'my_list'? | 变量名拼写错误。定义的是 my_list,遍历时却用了 mylist。 | my_list = [1, 2, 3]for i in my_list:print(i) |
小结
for 临时变量 in 序列:是for循环的标准语法,用于遍历序列中的每个元素。- 循环体代码必须通过缩进来定义,通常缩进 4 个空格。
range(start, stop[, step])函数用于生成一个整数序列,常与for循环搭配来控制循环次数。其区间是 左闭右开 的。for循环可以嵌套,内层循环会在外层循环的每次迭代中完整执行一遍。- 遍历时,临时变量会依次被赋值为序列中的元素,可在循环体内使用。
📋 行动清单
- 将本节寻找素数的代码在环境中运行一遍,并尝试修改代码,找出 200 以内的素数。
- 编写一个
for循环,使用range()倒序打印 10 到 1 的数字。 - 思考:如果要遍历一个字典的所有键,
for循环应该怎么写?(提示:直接遍历字典拿到的是键)
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:for循环(含1 个 Notebook)ZIP · 711B