Keyboard shortcuts

Press or to navigate between chapters

Press ? to show this help

Press Esc to hide this help

第四十一章:分支与循环

复习

  • 变量保存值,表达式根据变量和运算符计算新值。
  • 至此的程序仍只会按书写顺序向下执行。

TL;DR

  • 分支让程序根据条件选择不同路径。
  • 循环让程序在条件成立时重复一段工作。
  • 在底层,它们分别依靠比较和跳转指令实现。

正文

  闹钟程序不能无论几点都响,求和程序也不能只处理第一个数。程序要面对不同情况,首先需要一个会得出真或假的条件:

if temperature < 0:
    show("结冰了")
else:
    show("未结冰")

  这叫作分支。条件为真时执行第一块,为假时走另一块。它让程序的执行路线像岔路口一样改变。条件本身也是表达式,只是结果的类型通常为“真/假”。

  另一种常见需求是重复。下面的程序从 1 数到 3:

count = 1
while count <= 3:
    show(count)
    count = count + 1

  while 每次先检查条件;条件为真,就执行缩进的一段,再回到条件处;条件为假,才继续向后。这就是循环。循环的主体必须有机会改变条件涉及的值,否则它可能永远停不下来。

  如果把它们翻回我们熟悉的机器世界,秘密并不复杂:CPU 先比较两个值,再依据比较结果跳到某个地址。分支相当于“满足条件就跳到这里”;循环则是“做完后跳回前面再检查”。高级语言把标签、比较和跳转组织成了更容易阅读的结构。

  分支与循环已经能写出相当多的程序,但同一段“计算价格”“打印标题”的步骤经常会在多处出现。复制粘贴会让修改变得困难。下一章,我们把一组步骤命名为可以反复调用的函数。

思考题

为什么循环体中常常需要更新 count 一类变量?

小结

知识点

  • if 根据条件选择路径。
  • while 在条件为真时重复执行代码块。
  • 分支和循环在底层都可由比较与跳转构成。

参考资料

  • Niklaus Wirth,《算法+数据结构=程序》

思考题答案(仅供参考)

  因为条件需要最终变为假,程序才能离开循环。若 count 从不改变,count <= 3 可能一直成立。

协议

本文采用 CC BY-NC-SA 4.0 协议发布。