
6.5 分支结构程序举例
计算机要处理的问题往往是复杂多变的,仅采用顺序结构是不够的,还需要利用分支结构来解决实际应用中的各种问题。在Python中可以通过if、elif、else等条件判断语句来实现单分支、双分支和多分支等分支结构。
使用分支结构需要注意以下问题。
(1)每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。
(2)使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
(3)单分支结构if语句,也可以并列使用多条if语句实现对不同条件的判断。
(4)在Python中没有switch…case语句。
if语句的语句块只有在条件表达式的结果的布尔值为真时才执行,否则将跳过语句块执行该代码块后面的语句。
if语句中条件部分可以使用任何能够产生True或False的语句形成判断条件,最常见的方式是采用关系操作符,Python语言共有6个关系操作符。表6-2为if中常用的关系操作运算符。
表6-2 Python的关系操作符

注意:在Python中使用单等号“=”表示赋值语句,而使用双等号“==”表示等于,要注意区分。
6.5.1 单分支结构

单分支结构if语句主要由三部分组成:关键字if,用于判断结构真假的条件判断表达式,以及当表达式为真时执行的代码块。if语句就是对语句中不同条件的值进行判断,进而根据不同的条件执行不同的分支语句。
在Python中if语句的语法格式如下:

单分支结构的流程图如图6-9所示。
下面根据几个简单的小例子,来进一步了解一下单分支结构。
【例6-3】输入两个数a和b,比较它们的大小,输出其中的较大数。a与b不能相同。

程序运行结果如图6-10所示。
其运行的流程图如图6-11所示。

图6-9 单分支语句流程图

图6-10 输出较大值结果

图6-11 输出较大值流程图
该程序是一个if单分支结构的程序,在执行过程中会按照键盘输入两个不同值的大小,选择不同的语句执行。这是一个简单的二段式的单支判断。
下面再来看看另一个简单的小例子。
【例6-4】输入一个学生的成绩,判断其是否及格,判断标准是,如果输入的成绩大于等于60,则属于及格,否则为不及格。使用双分支结构实现。

程序运行结果如图6-12所示。
有兴趣的读者,可以试试画出上面例子中程序的流程图。

图6-12 输出成绩结果
6.5.2 双分支结构

双分支结构是有两个分支,如果条件成立,执行分支1语句,否则执行分支2语句,分支1语句和分支2语句都可以由一条或多条语句构成。在Python中if…else语句用来构成双分支结构,语法格式如下:

双分支结构的流程图如图6-13所示。

图6-13 双分支结构的流程图
下面根据两个简单的小例子,来进一步了解一下双分支结构。
【例6-5】输入一个数,如果输入的数比10大,则输出该数。如果输入的数比10小,则输出10。

程序运行结果如图6-14所示。

图6-14 比较结果
其运行的流程图如图6-15所示。
该程序是一个if…else语句的双分支结构的程序,在执行过程中会判定输入的数与10的大小比较结果,而选择不同的分支语句执行。
【例6-6】输入一个学生的成绩,判断其是否及格,判断标准是:如果输入的成绩大于等于60,则属于及格,否则为不及格。使用双分支结构实现。

程序运行结果如图6-16所示。

图6-15 与10比较的流程图

图6-16 输出成绩结果
有兴趣的读者,可以试试画出上面例子中程序的流程图。
6.5.3 多分支结构

双分支结构只能根据条件表达式的真或假决定处理两个分支中的一个。当实际处理的问题有多种条件时,就需要用到多分支结构。在Python中用if…elif…else描述多分支结构,语句格式如下:

多分支结构的流程图如图6-17所示。
下面根据两个简单的小例子,来进一步了解一下双分支结构。

图6-17 多分支结构的流程图
【例6-7】输入狗的年龄,求其对应的人类年龄,其对应关系为,当狗的年龄是1岁时,对应人类14岁,当狗的年龄是2岁时,对应人类22岁,当狗的年龄大于2岁时,每增加1岁,对应人类的年龄就增加5岁。

程序运行结果如图6-18所示。

图6-18 狗对应的年龄结果
其运行的流程图如图6-19所示。
下面再看看另一个例子。

图6-19 输出狗的年龄流程图
【例6-8】输入一个学生的成绩,判断其成绩的级别,判断标准是:如果输入的成绩小于60,则属于不及格;输入的成绩大于等于60,小于70,则属于及格;输入的成绩大于等于70,小于80,则属于中等;输入的成绩大于等于80,小于90,则属于良好;输入的成绩大于等于90,小于等于100,则属于优秀。使用多分支结构实现。

程序运行结果如图6-20所示。

图6-20 成绩等级结果
在使用多分支结构时要注意以下问题。
(1)无论有多少个分支,程序执行了一个分支后,其余分支不再执行。
(2)elif不能写成elseif。
(3)当多分支中有多个表达式同时满足时,则只执行第一个与之匹配的语句块。因此,要注意多分支中表达式的书写次序,防止某些值的过滤。
多分支结构是二分支结构的扩展,这种形式通常用于设置同一个判断条件的多条执行路径。Python测试条件的顺序为条件表达式1、条件表达式2、……一旦遇到某个条件表达式为真的情况,则执行该条件下的语句块,然后跳出分支结构。如果没有条件为真,则执行else下面的语句块。语句的作用是根据表达式的值确定执行哪个语句块。
6.5.4 if语句嵌套结构

在嵌套if语句中,可以把if…elif…else结构放在另外一个if…elif…else结构中。语法格式如下:

下面根据一个简单的小例子,来进一步了解一下if语句嵌套结构。
【例6-9】输入一个数,判断输入的数字能否整除2或3,并给出运算结果。程序首先判断数值能否整除2,如果能整除,再判断是否能整除3,如二次判断均成立则给出该数能同时整除2和3并输出提示,否则仅给出能整除2的输出提示。当第一个判断整除2不成立时,则判断是否能整除3,如判断成立则说明能整除3不能整除2,否则给出该数值不能整除2和3。

程序运行结果如图6-21所示。

图6-21 整除结果
6.5.5 多重条件判断

在Python编程中,经常会遇到多重条件比较的情况。在多重条件比较时,需要用到and或者or运算符。
注意以下问题。
(1)and——A and B:表示A和B两个条件必须同时满足才可以执行。
(2)or——A or B:表示A或B,两个条件只要满足其中的任意一个,就可以执行。
下面根据一个简单的小例子,来进一步了解一下多重条件判断结构。
【例6-10】输入一个年龄,根据年龄段来判断要办什么样的卡。青年卡或老年卡标准是18岁及以下或60岁以上。其他年龄是中年卡,本例要实现输入一个年龄值,首先判断是否是有效年龄,然后再判断该年龄要办什么样的卡。

程序运行结果如图6-22所示。

图6-22 判断结果