Python程序设计:人工智能案例实践
上QQ阅读APP看书,第一时间看更新

3.13 布尔运算符andornot

条件运算符><>=<===!=可用于组成简单条件,例如grade>=60。要将简单条件进行组合,构成更复杂的条件,可以使用布尔运算符andornot

布尔运算符and

要在执行控制语句的套件之前确保两个条件都为True,可以使用布尔运算符and来组合条件。下面的代码定义了两个变量,当且仅当两个简单条件都为True时,测试条件为True,如果两个简单条件中的任何一个(或两个)为False,则整个and表达式的值为False

if语句包含以下两个简单条件:

  • gender == 'Female'决定一个人是否是女性;
  • age >= 65决定一个人是否是老年人。

首先评估and运算符左侧的简单条件,因为==的优先级高于and。如有必要,接下来评估and右侧的简单条件,因为>=也具有比and更高的优先级。(后面会简要讨论为什么只有当左侧条件为True时,才会评估and运算符右侧的条件。)当且仅当两个简单条件都为True时,整个if语句的条件为True。通过添加冗余括号可以使组合条件更清晰,如下:

下表称为真值表,通过显示表达式1表达式2的值为FalseTrue的所有四种可能组合来总结运算符and的运算规则。

布尔运算符or

布尔运算符or可以测试两个条件中的一个两个是否为True。在下面的代码中,如果其中一个两个简单条件为True时,整个测试条件为True,当且仅当两个简单条件均为False时,整个测试条件为False

代码段[6]同样包含两个简单的条件:

  • semester_average >= 90确定学生在学期内的平均成绩是否为A(90或以上);
  • final_exam>=90确定学生的期末考试成绩是否为A

运算符and的优先级高于or。下面的真值表总结了布尔运算符or的运算规则。

利用短路提高性能

一旦知道整个条件是否为False,Python就会停止计算and表达式。类似地,一旦知道整个条件是否为True,Python就会停止计算or表达式。这种机制称为短路。因此在条件

中,如果gender不等于'Female',立即停止计算,因为整个表达式的值一定为False;否则继续执行,如果age大于或等于65,整个表达式的值为True

同样,在条件

中,如果semester_average大于或等于90,立即停止计算,因为整个表达式的值一定为True;否则继续执行,因为如果final_exam大于或等于90,整个表达式的值仍然可以是True

在使用and表示条件时,应该将其值更有可能为False的条件放在最左边。同样,在使用运算符or的表达式中,应该将其值更有可能为True的条件放在最左边。这些技巧可以减少程序的执行时间。

布尔运算符not

布尔运算符not表示“取反”,即True变为FalseFalse变为Truenot只有一个操作数,是一元运算符。如果原始条件(没有not运算符)为False,可以在条件之前放置not运算符来选择执行该路径,例如:

通常,我们会避免使用not,而是以更“自然”或方便的方式表达条件。例如,上面代码中的if语句也可以写成如下形式:

下表是not运算符的真值表。

下表从上到下按优先级的降序显示了运算符的优先级和结合性。