
1.8.1 if分支结构
1.最简单的if分支结构
if分支结构是最简单的分支机构,其格式如下:
前语句块 if逻辑表达式: 分支语句块 #需要缩进 后续语句块
其中,if是关键字;if行末尾的冒号“:”是固定格式符,表明后续的语句块是分支语句块。分支语句块由一行或多行代码组成。分支语句块需要缩进,只有缩进的语句块才能是分支语句块,不缩进的语句块说明分支语句块的结束。if语句中的逻辑表达式见1.5.2节介绍的内容,由逻辑判断符(>、>=、<、<=、==、!=、is、isnot)、逻辑运算符(and、or、not)构成的表达式,返回值是True或False。当分支语句块只有一行时,分支语句可以放到冒号“:”后面,其格式为:
前语句块 if 逻辑表达式:分支语句 后续语句块

图1-12 if分支结构的执行流程
If分支结构执行的顺序是,当执行完前语句块进入到if语句,解释器先判断if后面的逻辑表达式,如果逻辑表达式的返回值是True,则执行分支语句块;如果逻辑表达式的返回值是False,则直接跳过分支语句块,执行后续语句块。if分支结构的执行流程如图1-12所示。
if分支语句的实例如下所示。

2.if…else分支结构
if…else分支结构要比if分支结构稍微复杂些,其格式如下:

其中,if是关键字;if和else行末尾的冒号“:”是固定格式符,表明后续的语句块是分支语句块。分支语句块由一行或多行代码组成。分支语句块需要缩进。如果在分支语句中暂时不想执行动作,可以只写一句pass。
if…else分支结构执行的顺序是,当执行完前语句块进入到if语句,解释器先判断if后面的逻辑表达式,如果逻辑表达式的返回值是True,则执行分支语句块1,执行分支语句块1后,跳过分支语句块2,直接执行后续语句块;如果逻辑表达式的返回值是False,则直接跳过分支语句块1,执行分支语句块2,之后执行后续语句块。if…else分支结构的执行流程如图1-13所示。

图1-13 if…else分支结构的执行流程
下面是一个简单的例子,根据输入成绩判断,大于或等于60分的成绩及格,小于60分的成绩不及格。

3.if…elif…else分支结构
if…elif…else分支结构可以进行多次判断,其格式如下:

其中,if是关键字;if、elif和else行末尾的冒号“:”是固定格式符,表明后续的语句块是分支语句块。elif根据具体情况,可以设置多个elif,elif是elseif的缩写。分支语句块需要缩进。如果在分支语句中暂时不想执行动作,可以只写一句pass。else语句块是可选的。
if…elif…else分支结构执行的顺序是,当执行完前语句块进入到if语句,依次判断各逻辑表达式的值,如果遇到第1个逻辑表达式的值为True时,则执行对应的分支语句块,执行完这个分支语句块后,跳过其他分支语句块,执行后续语句块;如果所有的逻辑表达式的返回值都是False,则执行else的补充分支语句块,然后执行后续语句块。if…elif…else分支结构的执行流程如图1-14所示。

图1-14 if…elif…else分支结构的执行流程
if…elif…else分支结构实例如下,根据输入的成绩分成不同的等级。
