人人都能学编程
English 开始学习
课程 2 · Python 入门第 9 课 / 共 14 课免费阅读

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、5
  • range(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)
逐步执行
  1. L1i 依次取 1、2、3、4、5。i = 1
  2. L2每一轮打印 i 和它的平方。1 1
  3. L2……最后一轮:i = 5。5 25

从 1 加到 100

动手试试

累加器 total 每一轮都在变大。

total = 0
for n in range(1, 101):
    total = total + n
print(total)
逐步执行
  1. L1循环之前,累加器从 0 开始。total = 0
  2. L3n = 1:total 变成 1。total = 1
  3. L3n = 2:total 变成 3;n = 3:6……total = 3
  4. L4n = 100 之后循环结束,只打印一次。5050

常见错误

在循环里重置

如果 total = 0 写在循环里面,每一轮都会被清零。累加器要在循环之前初始化。

range 不包括终点

range(1, 10) 到 9 就停了。要包括 10,写 range(1, 11)。

小测验

1. 这段代码会输出什么?

for i in range(2, 8, 2):
    print(i)
  1. A
    2
    4
    6
  2. B
    2
    4
    6
    8
  3. C
    2
    3
    4
    5
    6
    7
查看答案

答案:A

从 2 开始,每次加 2,在 8 之前停。

2. 这段代码会输出什么?

count = 0
for ch in "hello":
    if ch == "l":
        count = count + 1
print(count)
  1. A
    2
  2. B
    1
  3. C
    5
查看答案

答案:A

循环依次看到 h、e、l、l、o,其中有两个 "l"。

动手练习

3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。

  1. 预测输出两列数字

    准确写出程序的输出。

  2. 改需求从求和改成求积

    这段程序把 1 加到 n。改成把 1 × 2 × … × n 乘起来(阶乘),并打印结果。

  3. 从零写倒计时

    读入一个整数 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.