3.2.1 单分支结构
下面我们来改进程序 3.1,使得程序能向游客提供一些温馨提示,例如当温度达到摄氏 35 度就发出高温警告信息。显然这里需要判断温度是否高于 35 度,并根据是或否来执行不 同的动作。
所有编程语言都提供了条件语句(if 语句),用来实现有条件地执行语句的功能。Python 语言的 if 语句有多种形式,最简单的形式是:
if <条件表达式>:
<条件语句体>
其中<条件表达式>是布尔表达式,<条件语句体>是由一条或多条语句组成的语句序列。<条件语句体>的左端与 if 部分相比必须向右缩进,表明它是 if 部分(不妨理解为条件语句的头 部)的下属,就像躯体是头部的下属一样。
if 语句的语义很容易理解:首先计算 if 后面的条件表达式,如果结果为 True,则控制转 到条件语句体的第一条语句,一旦条件语句体执行完毕,控制即转到 if 语句的下一条语句; 如果结果为 False,则跳过条件语句体,控制直接转到 if 语句的下一条语句。图 3.4 中的流程 图形象地解释了 if 语句的语义,其中菱形框表示条件测试。虽然 if 语句根据条件表达式计算 结果的不同而有两个分支,但我们习惯说这种形式的 if 语句实现的是单分支控制结构,因为 有一个分支什么也不做。注意,无论条件是真是假,最后控制都转到 if 语句的下一条语句, 也就是说这条 if 语句内部虽有两个分支,但总体只有一个出口①。
图 3.4 单分支控制结构
利用单分支形式的 if 语句,可以很容易地改进程序 3.1,使之具有高温告警功能。
① 在标准流程图符号中有一种连接符号,用于将两个进入的流程线合并成一个出去的流程线,这里的 if 语句 就可以用连接符号来合并两个分支的末端,形成唯一出口。但为了流程图的简明,我们没有用连接符号,而 是直接将两个流程线合并,相信这并不会影响对流程的理解。
【程序 3.2】eg3_2.py
f = input("Temperature in degrees Farenheit: ")
c = (f – 32) * 5.0 / 9
print "Temperature in degrees Celsius:", c if c > 35:
print "Warning: Heat Wave!"
这个新版本在原来版本的最后增加了一条 if 语句,该语句的语句体是有条件地执行的。就是 说,程序的执行结果取决于变量 c 的值。
我们还可以进一步改进程序 3.2,使之针对极端寒冷的情况也发出寒潮告警信息。具体改 法和上面是类似的,只需再增加一条 if 语句来检查温度是否足够低。
【程序 3.3】eg3_3.py
f = input("Temperature in degrees Farenheit: ")
c = (f – 32) * 5.0 / 9
print "Temperature in degrees Celsius:", c if c >= 35:
print "Warning: Heat Wave!" if c <= -6:
print "Warning: Cold Wave!"