学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 Python 第一步 › 第 5

循环(上)—— for:让计算机做重复的事

普通课50 分钟

本课导读

"把这件事重复一百遍"——人类听到会叹气,计算机听到会兴奋。循环是编程释放杠杆的地方:写 3 行代码,干 100 万件事。本课学 for 循环和它的黄金搭档 range(),以及一个贯穿整个数据世界的经典套路——累加器。

从一个偷懒的需求开始

假如要打印 5 遍"跳绳"打卡记录,你当然可以复制粘贴 5 行 print()。但如果是 500 遍呢?for 循环的写法:

Python

拆解语法:

  • range(5) 产生一串数字:0、1、2、3、4(注意:从 0 开始,到 5 之前结束,一共正好 5 个)
  • for i in ... 的意思是:让变量 i 依次变成这串数字里的每一个,每变一次,就把缩进的内容执行一遍
  • 缩进规则和 if 一模一样:缩进的部分属于循环,不缩进的 print("跳完收工!") 只在循环全部结束后执行一次

range(5) 改成 range(100) 再运行——同样 2 行代码。这就是杠杆。

提示

range() 从 0 开始是编程世界的传统(以后学列表你会发现万物从 0 数起)。想要从 1 开始也行:range(1, 6) 产生 1、2、3、4、5——含头不含尾,左端点包含,右端点不包含。这个"含头不含尾"在 Python 里到处适用,现在就把它记牢。

累加器:循环世界的第一套路

循环最常干的活不是打印,而是边转圈边攒东西。经典问题:1 加到 100 等于多少?

Python

这个模式叫累加器,三步缺一不可:

  1. 循环前:把储蓄罐清零(total = 0
  2. 循环中:每圈往里存一笔(total = total + n,还记得第 2 课"变量可以更新"吗)
  3. 循环后:储蓄罐里就是答案

数学家高斯小时候心算出 5050 震惊了老师;你的程序 0.001 秒搞定——而且把 101 改成 1000001 也只是改个数字的事。

说明

新手最容易犯的错:把 total = 0 写进循环里面(缩进错了)。那样每圈都把储蓄罐倒空重来,最后只剩最后一笔。累加器必须在循环外面初始化——遇到结果不对,先检查这里。

for 不止能数数:遍历字符串

for 的本事是"把一串东西挨个过一遍",这串东西不一定是数字。字符串也是"一串"——一串字符:

Python

注意第二段把循环和 if 组合了起来:每个字符过一遍,符合条件的才计数——这是累加器的变体(计数器),也是你第一次看到两种结构嵌套。缩进读法:if 属于 for(缩进 4 格),计数那行属于 if(缩进 8 格)。

✍️ 练习

练习 1:平方表

打印 1 到 10 每个数的平方,格式如「3 的平方是 9」。(乘方可以用 n * n,或者用新符号 n ** 2。)

Python
💡 提示

for n in range(1, 11): 循环 10 次,循环体一行 f-string 搞定。

✅ 参考答案
for n in range(1, 11):
    print(f"{n} 的平方是 {n ** 2}")

** 是乘方运算符:n ** 2 即 n 的 2 次方。

练习 2:偶数求和

计算 1 到 100 中所有偶数的和(正确答案应该是 2550)。

Python
💡 提示

两条路:① 循环 1-100,用上一课的 n % 2 == 0 筛出偶数再累加;② 更妙——range(2, 101, 2) 的第三个参数是步长,直接只产生偶数。两种都试试。

✅ 参考答案
# 方法一:循环 + if 筛选
total = 0
for n in range(1, 101):
    if n % 2 == 0:
        total = total + n
print(f"偶数之和:{total}")

# 方法二:range 步长直达
total2 = 0
for n in range(2, 101, 2):
    total2 = total2 + n
print(f"偶数之和:{total2}")

同一个问题多种解法很正常——方法一更通用(条件可以任意复杂),方法二更简洁(条件恰好是等差时)。

练习 3:火箭倒计时(挑战)

打印 10、9、8……1,最后打印"点火!🚀"。提示:range 的步长可以是负数。

Python
✅ 参考答案
for n in range(10, 0, -1):
    print(n)
print("点火!🚀")

range(10, 0, -1):从 10 开始,步长 -1,到 0 之前停(含头不含尾对负步长同样成立,所以最后一个是 1)。

随堂测验

随堂测验0 / 4 题正确

1. range(5) 产生的数字是?

2. 累加器模式中,total = 0 必须写在哪里?为什么?

3. for c in "你好吗" 的循环体会执行几次?

4. 想产生 1 到 9 的所有奇数(1、3、5、7、9),下面哪个 range 正确?

本课小结

  • for i in range(n):写 2 行,干 n 件事;range 从 0 起、含头不含尾、可设步长
  • 累加器三步:圈外清零 → 圈内累加 → 圈外收获;计数器是它的变体
  • for 能遍历一切"一串东西":数字串、字符串,以后还有列表
  • 循环 + if 的嵌套组合,是数据处理的原子操作

下一课是循环的另一半:不知道要转多少圈时,用 while——"烧水直到开"。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…