学径 LearnPath

CAICP-E · Python 编程基础

一直做到停

while、break、continue。每一圈都要让条件有机会变假。

讲解模式

这一节要学会什么

#what

for 适合次数明确的重复。抄 3 遍、加到 5,圈数事先知道。

次数不确定时,用 while。 它问:条件还真吗?真就再做一圈。

这还是 循环。只是停不停,改由条件说了算。

你还会认识两个小开关: break 整段停。continue 跳过本圈。

这一课不把循环套进循环。先让一圈 while 自己会停。

还没到站就一直坐

#hook

坐校车时,不到学校就继续坐。你事先不一定知道要坐几站。 只知道:到了没有。

吃饭也一样。盘子里还有,就再吃一口。 空了才停。

密码一直问,直到答对。也不知道要问几回。

这就是「条件还成立,就继续」。适合用 while

还没到站就继续

如果觉得有点难 先写一个会自己停下来的 while。 每一圈都让计数变大。 想清楚:什么时候变成假?

如果已经会了 写「一直问,直到答对」。 while 也可以带 else。正常跑完才走 else,被 break 打断就不走。 可以想成:坐到终点才发奖,中途拉铃就没有。 pass 第 8 课见过,循环里同样只是占位子。

while:条件真就继续

#explore-while

while 后面写条件。条件为真,就跑循环体。 跑完再回来问条件。

python
n = 1
while n <= 3:
    print(n)
    n = n + 1

会打印 1、2、3。每一圈 n 变大。 变成 4 以后,条件为假,停下。

校车一直开到学校站

忘记改 n 会怎样?

python
n = 1
while n <= 3:
    print(n)

n 一直是 1。条件一直真。 程序可能一直打印。这叫死循环。

写 while 一定要想:什么时候变假?哪一行让它慢慢靠近终点?

while 也要冒号和缩进。和 iffor 一样。

盘子空了才停:

python
rice = 3
while rice > 0:
    print("吃一口")
    rice = rice - 1
print("盘子空了")

每一口少 1。减到 0,循环停。 最后那句没有缩进,总会出现。

空盘子占着位置,程序还在跑

和 for 怎么选?知道要做几遍,用 for。 一直做到某个条件,用 while

break 和 continue

#explore-break

break 表示:立刻离开循环。整段路程结束。

python
n = 1
while n <= 10:
    if n == 4:
        break
    print(n)
    n = n + 1

打印 1、2、3。到 4 就跳出。 后面的 5 到 10 都不做。

拉下车铃,整段路程结束

continue 表示:这一圈别做完了。直接进入下一圈。

python
n = 0
while n < 5:
    n = n + 1
    if n == 3:
        continue
    print(n)

会打印 1、2、4、5。3 被跳过了。

公交车跳过第三站继续开

注意:continue 前要先改条件。上面先 n = n + 1,再决定跳不跳。 不然可能永远停在这一圈。

for 里也能用 breakcontinue。意思相同。

一直问到答对,也可以用 break:

python
while True:
    ans = input("3+5=? ")
    if ans == "8":
        print("对了")
        break
    print("再想想")

while True 条件一直真。全靠答对以后 break 才停。 这是「一直问,直到正确」的一种写法。

小项目:问到对、坐到站、吃到空

#explore-until

先做口算门。答对才停。

python
ans = ""
while ans != "8":
    ans = input("3+5=? ")
print("对了")

不知道要问几回。所以用 while,不用 for。

再做校车。站数可以数,但停不停看「到了没有」。

python
stop = 0
at_school = False
while not at_school:
    stop = stop + 1
    print("到第", stop, "站")
    if stop == 4:
        at_school = True
print("学校到了")

到第 4 站,条件变假,下车。

盘子里还有就吃:

python
rice = 3
while rice > 0:
    print("吃一口")
    rice = rice - 1
print("盘子空了")

每一口少 1。减到 0,循环停。

循环套循环,下一课再排格子。先让这一圈自己会停。

这节课我学会了

#review

记住这些:

  1. while:条件真就重复。每一圈要让条件有机会变假。
  2. 次数明确用 for。一直问到某个条件用 while
  3. break:整段循环结束。
  4. continue:跳过本圈剩下的句子。

试着在心里跑一遍:

python
n = 1
while n <= 2:
    print(n)
    n = n + 1

打印 1 和 2。变成 3 后停下。

下一课才把循环套起来。先坐到站再下车。

试一试

#evaluate

看完就来检查一下。选错了也可以再想。

单选题

while 打印什么

n = 1。while n <= 2: print(n); n = n + 1。会打印什么?

单选题

忘记加一

n = 1。while n <= 3: print(n)。没有 n = n + 1。会怎样?

单选题

continue 跳过谁

n 从 0 开始。while n < 5: n = n + 1;如果 n == 3 就 continue;否则 print(n)。会打印什么?

多选题

循环控制

下列说法正确的有哪些?可以多选。

可多选

未登录时不会保存学习进度