for 与 range() · Python 从零开始
怎样对一串数字、或者对每个字母重复执行代码?
课程目录为什么需要它
在机器人课里你已经见过 for i in range(n)。在真实的程序里,计数器本身就很有用:给列表编号、把 1 加到 100、逐个检查单词的每个字母。再配上一个收集结果的变量(累加器 Accumulator),循环就能算出东西来。
直觉理解
range 生成一串整数:
range(5)→ 0、1、2、3、4(在 5 之前停)range(1, 6)→ 1、2、3、4、5range(0, 10, 2)→ 0、2、4、6、8(步长 2)
for 依次把每个值交给循环变量。它也能用在字符串上:for ch in "abc": 依次得到 "a"、"b"、"c"。
累加器的写法:
total = 0 # 循环前先初始化
for n in range(1, 4):
total = total + n # 循环里更新
print(total) # 循环后使用定义
range() 函数
range(start, stop, step) produces whole numbers from start up to but not including stop, counting by step.range(start, stop, step) 生成从 start 开始、到 stop 之前(不含 stop)的整数,每次增加 step。
累加器 Accumulator
An accumulator is a variable that is initialised before a loop and updated in each iteration to build up a result.累加器是在循环前初始化、在每次迭代中更新、用来逐步得到结果的变量。
示例
平方数
动手试试把 range(1, 6) 改成 range(1, 11) 试试。
for i in range(1, 6):
print(i, i * i)逐步执行
- L1i 依次取 1、2、3、4、5。
i = 1 - L2每一轮打印 i 和它的平方。
1 1 - L2……最后一轮:i = 5。
5 25
从 1 加到 100
动手试试累加器 total 每一轮都在变大。
total = 0
for n in range(1, 101):
total = total + n
print(total)逐步执行
- L1循环之前,累加器从 0 开始。
total = 0 - L3n = 1:total 变成 1。
total = 1 - L3n = 2:total 变成 3;n = 3:6……
total = 3 - L4n = 100 之后循环结束,只打印一次。
5050
常见错误
在循环里重置
如果 total = 0 写在循环里面,每一轮都会被清零。累加器要在循环之前初始化。
range 不包括终点
range(1, 10) 到 9 就停了。要包括 10,写 range(1, 11)。
小测验
1. 这段代码会输出什么?
for i in range(2, 8, 2):
print(i)查看答案
答案:A
从 2 开始,每次加 2,在 8 之前停。
2. 这段代码会输出什么?
count = 0
for ch in "hello":
if ch == "l":
count = count + 1
print(count)查看答案
答案:A
循环依次看到 h、e、l、l、o,其中有两个 "l"。
动手练习
3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。
- 预测输出两列数字
准确写出程序的输出。
- 改需求从求和改成求积
这段程序把 1 加到 n。改成把 1 × 2 × … × n 乘起来(阶乘),并打印结果。
- 从零写倒计时
读入一个整数 n。从 n 倒数到 1,每行一个数,最后打印
Go!。
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| range() | range() 范围函数 | A function that produces a sequence of whole numbers, stopping before the stop value. |
| Accumulator | 累加器 | A variable set before a loop and updated each round to build a result. |
| Iteration | 迭代 | One pass through the body of a loop. |