重复的魔法
for 循环:一行代码顶一万行
这节课你要学会
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} 遍")
这是第 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}")
想检查几的口诀?(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,做不出来不要灰心,可以直接跳过,第十课后回来再战。)