💻 第四章 程序像河水一样流动着
📄 一句话概括

流程图里的循环像个人:帽子是循环条件、身体是循环体、短裤是跳回帽子的回线——帽子挂前还是挂后,决定了循环会不会至少跑一次。

📝 本节和前面几节的关系

上一节学会画基本符号,这一节专门对付循环的画法——教材用【帽子】【短裤】两个形象的比喻讲它。

一、循环像个人:帽子、身体、短裤

流程图里的循环块画出来是这个形状:顶上一条回线像帽子(循环条件的判断),中间是身体(循环体),底下一条折线像短裤(跳回帽子的箭头)。 帽子管【还要不要继续】,身体管【每圈做的事】,短裤管【回到帽子】——三者缺一,循环就不成立。

二、帽子在前还是在后

帽子在前(先判断后执行):条件不成立时,身体一次都不进——第三章那 5 字节程序若加循环,多是这种; 帽子在后(先执行后判断):身体至少跑一次——菜单程序常用(先让你点一次,再看要不要继续)。 教材强调这个区别,因为它是初学时最常出错的地方:明明想【至少执行一次】,却写成了先判断。

三、循环三件套的检查清单

画/写循环时问三句:哪里进(初始条件)、什么时候停(终止条件)、怎么靠近终止(每圈的变化)。 第三句最要命:如果每圈不变,条件永远成立——死循环。第三章的 PC 一直往回跳还不改条件,就是这个下场。

四、动手 Demo:帽子短裤逐圈过一遍

把帽子(循环条件)每次检查的结果列出来,看清循环结束的那一刻。

# 帽子在前: 先判断,可能一次都不进
i = 1
while i <= 5:        # <- 帽子
    print("身体执行 i =", i)
    i += 1           # <- 每圈靠近终止
print("帽子第 6 次检查为假 -> 循环结束")

实跑输出:

--------------------------------------------------------------------
循环的【帽子】和【短裤】
--------------------------------------------------------------------

流程图里循环的样子像个人:上头一顶【帽子】(循环条件)、
中间是身体(循环体)、底下一条【短裤】(跳回条件的回线):

        ===============   ← 帽子: 循环条件 i <= 5 ?
        |  显示 i      |
        |  i = i + 1   |   ← 身体: 循环体
        ===============   ← 短裤: 跳回帽子
              ^
              |______________|

亲手跑一遍这个循环,看 【帽子】 每次检查的结果:

  轮到第几圈     帽子检查 i<=5     身体做了什么
  ------------------------------------------------
  1              真 -> 进身体      显示 1, i 变 2
  2              真 -> 进身体      显示 2, i 变 3
  3              真 -> 进身体      显示 3, i 变 4
  4              真 -> 进身体      显示 4, i 变 5
  5              真 -> 进身体      显示 5, i 变 6
  6              假 -> 出门        循环结束

规律:**帽子先检查、身体后执行**(所以可能一次都不进身体)。
若把检查放在身体之后(先做后查),就变成【至少执行一次】的循环——
两种循环的差别,全在帽子挂在前还是在后。

把 i 的初值改成 10,循环一次都不进——帽子在前的特征。 如果把 i += 1 删掉:帽子永远为真,程序卡死——终止条件必须被每圈推进。

30 秒实验

  1. 把 Demo 里的 i 初值改成 10,预测输出(应该什么都不打印)再跑一遍验证。
  2. 故意删掉 i += 1 跑一次(记得能中断)——亲手制造一次死循环,比听一百遍警告管用。

常见误区

  1. 忘了让循环变量靠近终止——死循环的最常见成因。
  2. 把【至少执行一次】的循环写成先判断——菜单首次不显示,用户一脸懵。
自测三问(点开对答案) 1. 循环流程图里【帽子】和【短裤】各指什么? —— 帽子=顶部的循环条件判断,短裤=底部跳回帽子的回线;中间是循环体。 2. 帽子在前与在后有什么差别? —— 在前可能一次都不执行;在后至少执行一次。 3. 写循环必查的三件事? —— 哪里进(初值)、何时停(条件)、怎么靠近停(每圈的变化)。

相关笔记