CAICP-E · Python 编程基础
一行又一行
循环套循环,用来排格子、写乘法表。
这一节要学会什么
#what课表是一张格子纸
#hook课表有行,也有列。先换一天,再把当天的课走完。
填格子也一样。一层管行。 一层管列。
外圈像换行。内圈像在这一行里一格一格填。

如果觉得有点难 用手指点:外圈一次,内圈扫一行。 先慢,再写代码。
如果已经会了 打印 3 行 4 列的星星。 再写出 1 到 3 的一小段乘法表。
外圈一行,内圈一颗星
#explore-grid打印 3 行 4 列的星星:
for row in range(3):
line = ""
for col in range(4):
line = line + "*"
print(line)屏幕上会得到:
****
****
****外层 row 管行。它走 3 步,就有 3 行。
内层 col 管这一行有几颗星。它走 4 步,一行就有 4 颗。
每一行先准备空字符串。内圈把星星接上去。
内圈结束,再 print 这一行。
内层循环必须缩进到外层里面。两层缩进要对齐。
外层的 print 只缩进一层。它等内圈全部做完,才打印这一行。

试着改成 2 行 5 列。只改两个数字。 格子就会变。
乘法表:每个乘每个
#explore-times格子不一定是星星。数字也可以一格一格填。
for i in range(1, 4):
for j in range(1, 4):
print(i, "x", j, "=", i * j)外圈 i 取 1、2、3。每个 i,内圈 j 再取 1、2、3。
一共 3 × 3 = 9 行。每一行都是一道乘法。
这就是一小段乘法表。先估次数,再写两个 for。
外 range(3)、内 range(2),内层每次 print 一次。一共几行?
3 × 2 = 6 行。

嵌套循环次数会变多。3 行 4 列,内圈要跑 12 次。 写之前先乘一乘。
上衣乘裤子:每种都配一遍
#explore-outfit两件上衣,三条裤子。有多少种搭配?
不必先把衣服装进列表。外圈走上衣 1、2。 内圈走裤子 1、2、3。
for top in range(1, 3):
for pants in range(1, 4):
print("上衣", top, "配裤子", pants)会打印 6 行。一共 2 × 3 = 6 套。
这叫枚举所有组合。每个和每个都试一次。

衣服、课表、格子,都是同一套路。先问:谁在外圈?谁在内圈?
内圈里也可以问一句
#explore-if内层循环里,可以再写 if。星星格子已经是两层。
if 再往里站一点就行。
比如第一列用 #,后面用 *:
for row in range(3):
line = ""
for col in range(4):
if col == 0:
line = line + "#"
else:
line = line + "*"
print(line)会得到:
#***
#***
#***if 属于内层。它每一格都问一次。
外层还是只管换行。
先看一眼就够。主活还是两层 range 把格子铺满。
内层 break 停哪一层
#explore-break你已经会 break。套在两层里,它只离开当前这一层。
for i in range(1, 4):
for j in range(1, 4):
if j == 2:
break
print(i, j)内层遇到 j == 2 就停。但外层还会继续下一个 i。
所以会看到:
1 1
2 1
3 1每一行才印到第一格。第二格一到,内圈就收工。 下一行又从头扫。

想两层都停,需要别的办法。本课只要知道:break 打的是它所在的那一层。
别套太深。两层刚刚好。
先画格子,再写两个 for。
这节课我学会了
#review记住这些:
- 外循环走一步,内循环走完整一轮。
- 内层要再缩进一层。
- 行和列、乘法表、上衣配裤子,都常用嵌套。
- 内层可以再写
if。 break默认只停当前层。
试着在心里跑一遍:
for row in range(2):
line = ""
for col in range(3):
line = line + "*"
print(line)会印两行,每行三颗星。
下一课才把一组东西装进一排格子。先把「一行又一行」跑熟。
试一试
#evaluate看完就来检查一下。选错了也可以再想。
单选题
打印多少行
外层 range(3),内层 range(2),内层每次 print 一次。一共打印几行?
单选题
break 停哪一层
内层 for 里写了 break。它通常会怎样?
单选题
星星印几行
外层 range(3),内层把 4 颗星拼成一行,外层再 print 这一行。屏幕上会出现几行星星?
多选题
关于嵌套循环
下列说法正确的有哪些?可以多选。
可多选
未登录时不会保存学习进度