fanhuasijin 2019-12-19
逻辑运算符是对真和假两种布尔值进行运算(操作 bool 类型的变量、常量或表达式),逻辑运算的返回值也是 bool 类型值。
Python 中的逻辑运算符主要包括 and(逻辑与)、or(逻辑或)以及 not(逻辑非),它们的具体用法和功能如表 1 所示。
逻辑运算符 | 含义 | 基本格式 | 功能 |
---|---|---|---|
and | 逻辑与(简称“与”) | a and b | 有 2 个操作数 a 和 b,只有它们都是 True 时,才返回 True,否则返回 False。 |
or | 逻辑或(简称“或”) | a or b | 有 2 个操作数 a 和 b ,只有它们都是 False 时,才返回 False,否则返回 True。 |
not | 逻辑非(简称“非”) | not a | 只需要 1 个操作数 a,如果 a 的值为 True,则返回 False;反之,如果 a 的值为 False,则返回 True。 |
下面代码示范了与、或、非这三个逻辑运算符的使用:
有些时候,程序需要使用多个逻辑运算符来组合复杂的逻辑。例如,假设想表达如下逻辑:需要购买一套必须以“Python”结尾的教程,且教程价格小于 50 元或该教程是基于“正式版”的。假如使用如下程序:
编译、运行上面程序,可以看到程序输出“打算购买这套Python教程”。那么上面程序是否有问题呢?
其实问题是存在的,这是因为程序会先计算 bookName.endswith(‘Python‘) and price < 50
,即使该逻辑表达式中的两个条件都是 False,但只要后面的 version==“正式版”
返回 True,整个表达式就会返回 True,从而导致程序依然会输出“打算购买这套Python教程”。因此,即使把上面程序中的 bookName 改为不以“Python”结尾,程序也依然会输出“打算购买这套Python教程”。
运算结果显然与逻辑需求并不一致,逻辑需求是:需要购买一套名以“Python” 结尾的教程。此时应该使用圆括号来保证程序先对 price < 50 || version =="正式版"
求值,然后再与 bookName.endswith(‘Python‘)
的结果求与。
因此,应该把程序改为如下形式:
纯文本复制
从上面代码可以看出,对于组合逻辑来说,使用圆括号保证运算顺序非常重要。
需要说明的是,即使不是为了保证逻辑运算的顺序,且有括号和没括号的输出结果是一样的,本教程也依然建议使用圆括号来提高程序的可读性。
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。以上实例中 7、5 和 12 是操作数。关系运算符用于计算结果是否为 true 或者 false。逻辑运算符用于测定变量或值之间的逻辑。