2.8 逻辑运算符
三种逻辑关系:与、或、非。
这三种逻辑计算的参与者和计算结果均是布尔值。
(1)与,就是口语中的“并且”。用符号“and”代表“与”关系。
“与”的两边都能计算出布尔值,只有两边的值都是True,整个命题的值才是True,其他情况都是False。
例如:变量a大于5并且小于10,用python表达就是:
m = a>5 and a<10
m代表了整个命题,是否成立要看a的值。
如果a的值是100,那么a>5成立,但是a<10不成立,那么此时m的值就是False。如果a的值是6,两个条件都成立则这个命题成立。只有a大于5并且大于10才成立。
假如a是整数,那么符合这个命题的a的值有6、7、8、9。
关于这种某个变量处于范围的计算,python还支持下面的写法:
m = 5<a<10
“与”还可以连着写多个,例如
bool = a>5 and b<3 and c>a
只有每一部分的值都为True,bool的值才是True,多个串联的与关系,从左算到右,如果计算过程中遇到一个False,那么剩下的就不再计算了,例如上面的例子,如果b<3不成立,那么就不会再测试c>a直接返回False
逻辑与的运算是从左到右,逐个检查每个布尔式是否是False,如果是False,那么停止后面的式子的检查,整个与表达式返回false,例如下面的代码:
a=4bool = a>5 and b<3 and c>aprint(bool)
运行这三行代码,最终打印的是False。
然而,下面的代码就出语法错误了:
a=8bool = a>5 and b<3 and c>aprint(bool)
这是因为a>5是True,那么就继续检查b<3,然后发现b并未定义!
(2)或,就是或者,用“or”代表“或”关系。
两个命题有一个成立,整个命题就成立。
例如这样一个命题:变量a大于10或者小于0,用python表达就是:
m = a>5 or a<10
a大于5或者a小于10只要有一个成立,m的值就是True,两个都不成立,m的值才是False。
或也可以连着写多个:
bool= a>5 or b<3 or c>a
逻辑或的运算是从左到右,逐个检查每个布尔式是否是True,如果是True,那么停止后面的式子的检查,整个或表达式返回True,例如下面的代码:
a=8bool = a>5 or b<3 or c>aprint(bool)
运行这三行代码,最终打印的是True。a>5成立,那么就不会再测试剩下的b<5和c>a,直接返回True。
然而,下面的代码就出语法错误了:
a=4bool = a>5 or b<3 or c>aprint(bool)
这是因为a>5是False,那么就继续检查b<3,然后发现b并未定义!
与和或结合起来的话,与的优先级高于或(相当于先乘除后加减,这里是先与后或),尽量使用括号,例如
a=4b=6c=7n = (a>5 or b<3 ) and c>a #表示两个条件同时成立。条件1:a>5或者b<3;条件2:c>am = a>5 or b<3 and c>a #表示两个条件有一个成立。条件1:a>5;条件2:b<3 and c>aprint(n,m)
(3)“非”就是否定、置反,用not表示,它是一个单目运算符(即计算只需要一个值)。
例如: not a<5
这个表示a小于5的否定,也就是a大于等于5。
这是三个逻辑的总结,左边两列是a和b的值,右边的列是根据a和b的值得到的值:
a | b | a and b | a or b | not a |
---|---|---|---|---|
True | True | True | True | False |
True | False | False | True | False |
False | True | False | True | True |
False | False | False | False | True |