
3.1 条件语句
if-else结构就是常见的逻辑控制手段,当我们写出这样的语句时,就意味着告诉了计算机什么时候该怎么做,或者什么是不用做的。
3.1.1 if-else
学习if-else判断语句之前,我们要回顾一下前面学过的布尔类型及布尔表达式。布尔类型的数据只有两种:True和False。人类以真伪善恶来判断事物,而在计算机世界中真伪对应的则是1和0,凡是能够产生一个布尔值的表达式统称为布尔表达式。
例3-1 布尔数据和布尔表达式

其实任何数据对象都可以判断其布尔值,除了0、None和所有为空的序列集合的布尔值为False之外,其他的数据对象都为True。这些对象可以用函数bool()进行判别。
回顾完布尔值,我们再来谈谈条件控制。条件控制其实就是if…else语句结构的使用,下面来看一下条件控制的基本用法。
例3-2 if…else语句的基本格式

在第2行中,关键字if后面可跟任何条件测试,而在下一行的缩进代码块中,可执行任何操作。如果判断条件的结果为True,解释器就会执行紧跟在if语句后面的代码;如果判断结果为False,就会执行else关键字后面的代码。上述代码之所以可以运行,是因为只存在两种情形:要么是成年人,要么不是,只有这两种情况,没有第三种选择。所以,if…else结构非常适合用于要让Python执行两种操作之一的情形。
3.1.2 if…elif…else
现实世界的选择是复杂的,不可能任何事物都是非黑即白、非善即恶,我们也经常遇到超过两个选项的情景。为了模仿现实世界中的多选择情景模型,Python提供了if…elif…else的语法结构。Python只执行if…elif…else结构中的一个代码块,它依次检查每个条件,直到遇到符合要求的条件测试。然后Python将执行其后面的代码,并跳过剩下的选项。
例3-3 elif语句

elif是else if的缩写,使用时可以有多个elif,而且Python并不要求if-elif结构后面必须有else代码块。

小白逆袭:条件测试的格式设置
在条件测试的格式设置方面,PEP 8提供的唯一建议是:在诸如==、>=和<=等比较运算符两边各添加一个空格,例如,if age<4:要比if age<4:好。这样的空格不会影响Python对代码的解读,而只是让代码阅读起来更容易。
3.1.3 if嵌套
if…elif…else语法结构功能强大,但仅适应于只有一个条件满足的情况,遇到符合条件的选项后,就执行与其对应的代码块而跳过余下的条件检测。但是在某些特定需求下,我们必须检查多个选择条件。比如在毕业找工作的时候,毕业生都想找到钱多事少离家近的工作,“钱多事少离家近”就属于多条件满足选项。为了同时满足多项条件选择需求,就要考虑在if语句中嵌套新的if语句,也就是所谓的if嵌套用法。
例3-4 if嵌套用法

开车的朋友可能遇到过警察同志查酒驾的情景,警察通过检测到的酒精含量来判断司机是否为酒驾、醉驾。酒精含量小于20时不构成酒驾,大于20且小于80的情况下为酒驾,最严重的是大于80的情况,属于醉驾。其中酒驾的满足条件有两个:大于20且小于80,属于多条件满足。