
3.1 选择结构
选择结构可用if语句、if…else语句和if…elif…else语句实现。
3.1.1 if语句
Python的if语句的功能跟其他语言的非常相似,都是用来判定给出的条件是否满足,然后根据判断的结果(即真或假)决定是否执行给出的操作。if语句是一种单选结构,它选择的是做与不做。它由三部分组成:关键字if本身、测试条件真假的表达式(简称为条件表达式)和表达式结果为真(即表达式的值为非零)时要执行的代码。if语句的语法形式如下:

if语句的流程图如图3-1所示。

图3-1 if语句的流程图
if语句的表达式用于判断条件,可以用>(大于)、<(小于)、==(等于)、>=(大于或等于)、<=(小于或等于)来表示其关系。
现在用一个示例程序来演示一下if语句的用法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行字符串;否则,直接退出程序。代码如下:

通常,一个程序都会有输入/输出,这样可以与用户进行交互。用户输入一些信息后,可对他输入的内容进行一些适当的操作,然后再输出用户想要的结果。可以用input进行输入,print进行输出,这些都是简单的控制台输入/输出,复杂的有处理文件等。
3.1.2 if…else语句
上面的if语句是一种单选结构,也就是说,如果条件为真(即表达式的值为非零),那么执行指定的操作;否则就会跳过该操作。而if…else语句是一种双选结构,是在两种备选行动中选择哪一个的问题。if…else语句由五部分组成:关键字if、测试条件真假的表达式、表达式结果为真(即表达式的值为非零)时要执行的代码,以及关键字else和表达式结果为假(即表达式的值为零)时要执行的代码。if…else语句的语法形式如下:

if…else语句的流程图如图3-2所示。

图3-2 if…else语句的流程图
下面对上面的示例程序进行修改,以演示if…else语句的使用方法。这里的程序很简单,只要用户输入一个整数,如果这个数字大于6,就输出一行信息,指出输入的数字大于6;否则,输出另一行字符串,指出输入的数字小于或等于6。代码如下:

【例3-1】输入一个年份,判断是否为闰年。闰年的年份必须满足以下两个条件之一:
(1)能被4整除,但不能被100整除的年份都是闰年。
(2)能被400整除的年份都是闰年。
分析:设变量year表示年份,判断year是否满足以下表达式。
条件(1)的逻辑表达式是:year%4 == 0&&year%100 != 0。
条件(2)的逻辑表达式是:year%400 == 0。
两者取“或”,即得到判断闰年的逻辑表达式为:

程序代码:

判断闰年后,也可以输入某年某月某日,判断这一天是这一年的第几天。以3月5日为例,应该先把前两个月的天数加起来,然后再加上5天即本年的第几天。特殊情况是闰年,在输入月份大于3时需考虑多加一天。
程序代码:

【例3-2】任意输入3个数字,按从小到大的顺序输出。
分析:(1)将x与y比较,把较小者放入x中,较大者放入y中。(2)将x与z比较,把较小者放入x中,较大者放入z中,此时x为三者中的最小者。(3)将y与z比较,把较小者放入y中,较大者放入z中,此时x、y、z已按由小到大的顺序排列。
程序代码:

假如x、y、z分别输入1、4、3,以上代码的输出结果:

其中,x,y=y,x这种语句是同时赋值,将赋值号右侧的表达式依次赋给左侧的变量。例如:x,y=1,4相当于x=1,y=4。
3.1.3 if…elif…else语句

选择结构
有时候需要在多组动作中选择一组执行,这时就会用到多选结构,对于Python语言来说就是if…elif…else语句。该语句可以利用一系列条件表达式进行检查,并在某个表达式为真的情况下执行相应的代码。需要注意的是,虽然if…elif…else语句的备选动作较多,但是有且只有一组动作被执行,该语句的语法形式如下:


注意:最后一个elif子句之后的else子句没有进行条件判断,它实际上处理跟前面所有条件都不匹配的情况,所以else子句必须放在最后。
if…elif…else语句的流程图如图3-3所示。

图3-3 if…elif…else语句的流程图
下面继续对上面的示例程序进行修改,以演示if…elif…else语句的使用方法。这里还是要用户输入一个整数,如果这个数字大于6,就输出一行信息,指出输入的数字大于6;如果这个数字等于6,则输出另一行字符串,指出输入的数字等于6;否则,指出输入的数字小于6。具体代码如下:

【例3-3】输入学生的成绩score,按分数输出其等级:score≥90为优,90>score≥80为良,80>score≥70为中等,70>score≥60为及格,score<60为不及格。
程序代码:


说明:3种选择语句中,条件表达式都是必不可少的组成部分。当条件表达式的值为零时,表示条件为假;当条件表达式的值为非零时,表示条件为真。那么哪些表达式可以作为条件表达式呢?基本上,最常用的是关系表达式和逻辑表达式。例如:

除此之外,条件表达式可以是任何数值类型表达式,甚至可以是字符串。例如:

另外,C语言用花括号{}区分语句体,而Python的语句体是用缩进形式来表示的,如果缩进不正确,会导致逻辑错误。
3.1.4 pass语句
Python提供了一个关键字pass,类似于空语句,可以用在类和函数的定义中或者选择结构中。当暂时没有确定如何实现功能,或者为以后的软件升级预留空间,或者为其他类型功能时,可以使用该关键字来“占位”。例如,下面的代码是合法的:
