这节课你要学会

1. 用 for 让电脑重复做事;2. 搞懂 range 和"从 0 开始数"的秘密;3. 让每次重复都稍微不一样;4. 用星星打印出漂亮图案。

让电脑抄 100 遍课文

老师罚抄课文 100 遍,你要写到手酸。电脑呢?

for i in range(100):
    print("我爱你,中国!")

两行代码,电脑"唰"地打印 100 遍,一点不累。这就是循环:让同一段代码重复执行。for 是"对每一遍",range(100) 是"重复 100 遍"

数数的小帮手:i

那个孤零零的 i 是什么?它是一个变量,电脑每重复一次,就往它里面放进一个新数:第 1 次放 0,第 2 次放 1,第 3 次放 2……它是循环里的计数员。打印它看看:

for i in range(5):
    print(i)
运行结果
0
1
2
3
4

大陷阱:电脑从 0 开始数数

range(5) 数出来的数是 0、1、2、3、4——正好 5 个数,但从 0 开始,到 4 结束,永远不包含 5 本身。就像爬楼梯:从 0 层出发,爬 5 层,最后站在 5 楼,但经过的是 0~4 层。人类习惯从 1 数,电脑坚持从 0 数,习惯它,程序员都这么过来的。

想要从 1 数到 10 呢?

range 还能装两个数:range(开始, 结束)。含头不含尾:

for i in range(1, 11):
    print(f"这是第 {i} 遍")
运行结果(只展示前 3 行和最后一行)
这是第 1 遍
这是第 2 遍
这是第 3 遍
……
这是第 10 遍

每次重复都干点不一样的事

循环最强大的地方:每次转一圈,i 换一个新数,我们就能利用它。

算 1 加到 100

高斯小时候算过这道题,他用了聪明公式。我们用笨办法——让电脑真的加一遍:

total = 0           # 准备一个记账本
for i in range(1, 101):
    total = total + i   # 把新数记到账上
print(f"1 加到 100 等于 {total}")
运行结果
1 加到 100 等于 5050

自己给自己加:total = total + i

第一次见这行会觉得奇怪:"total 怎么等于自己加 i?"记住等号是"装进去":把账本里的旧数拿出来,加上 i,再装回去。账本越滚越大,转完 100 圈就是总和。

用星星画图案

重复打印星星,再让每行多打一颗——用到刚学的"自己给自己加":

stars = ""
for i in range(5):
    stars = stars + "* "
    print(stars)
运行结果
*
* *
* * *
* * * *
* * * * * 

字符串也能"自己给自己加"!每转一圈,stars 就多一颗星星,打印出来就是三角形。改成 range(10) 就有 10 行,改成倒过来减星星就是倒三角——试试看!

动手试一试:九九乘法口诀检查器

看看电脑背口诀背得对不对:

n = int(input("想检查几的口诀?(1-9)"))
for i in range(1, 10):
    print(f"{n} × {i} = {n * i}")
运行结果(输入 7)
想检查几的口诀?(1-9)7
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63

口算能力不如你的电脑,用循环加 f 字符串就把整张口诀表"背"出来了。这就是程序员偷懒的智慧:能让电脑重复的事,绝不自己来。

练习

基础任务:倒计时。从 10 数到 1,每行一个数,最后打印"新年快乐!"。(提示:range(10, 0) 数不出来,试试 range(0, 10, -1),三个数的 range 是"从哪、到哪、每步多大",或者干脆想想别的办法)

进阶任务:偶数求和。算出 2+4+6+……+100 的结果。(提示:range(2, 101, 2),第三个数 2 表示每次跨两步)

隐藏挑战:空心正方形。打印一个 5×5 的空心正方形,只有边框是星号:

目标效果
* * * * *
*       *
*       *
*       *
* * * * *

(提示:这是本课程最难的一道题,需要循环里套 if,做不出来不要灰心,可以直接跳过,第十课后回来再战。)

接下来

for 循环适合"知道要重复几次"的事。但游戏里"猜到对为止"重复几次可说不准。下一课请出循环家族的另一位成员 while,再用它做你人生第一个完整的游戏——猜数字大战