逻辑运算符是用来做逻辑计算的,就像之前用到的比较运算符 ,每一次比较其实就是一次条件判断,都会得到一个相应的True或者False的值,而逻辑运算符的操作数就是一个用来做条件判断的表达式或者变量
运算符 | 说明 |
---|---|
and | 与 |
or | 或 |
not | 非 |
1. and(逻辑与)
应用场景:
- 用于连接需要同时成立的两个条件,相当于生活中的并且。
运算规则:
- 条件1 and 条件2 - 两个 True 结果才是 True,只要一个是 False 结果就是 False
'''
真 and 真 ----》真
真 and 假 ----》假
假 and 真 ----》假
假 and 假 ----》假
规律:一假为假,全真为真
'''
# 案例: 判断num是否是一个大于10的偶数
num = 8
# num是否大于10: num > 10
# num是否是偶数: num % 2 == 0
print('num是否是一个大于10的偶数:', num > 10 and num % 2 == 0)
# 案例:判断num是否能同时被3和7整除
num = 63
print('num是否能同时被3和7整除:', num % 3 == 0 and num % 7 == 0)
# 如果一个数能同时被另外两个数整除,那么这个数一定能被这两个数的最小公倍数整除
print('num是否能同时被3和7整除:', num % 21 == 0)
# 案例:判断num是否是一个在100~200之间的奇数
num = 202
print('num是否是一个在100~200之间的奇数:', num % 2 != 0 and 100 < num < 200)
2. or(逻辑或)
应用场景:
- 如果要求两个条件中只要有一个条件成立就行,这个时候就用 or 来连接这两个条件;
- 相当于生活中的或者
运算规则:
- 条件 1 or 条件2 - 只要有一个是 True 结果就是 True,两个都是 False 结果才是 False
# 案例:判断num是否能被3或者5整除
num = 9
print('num是否能被3或者5整除:', num % 3 == 0 or num % 5 == 0)
# 案例:判断year对应的年份是否是闰年
# 是闰年的条件: 能被4整除但是不能被100整除或者能够被400整除的年
year = 2024
print('year对应的年份是否是闰年', (year % 4 == 0 and year % 100 != 0) or year % 400 == 0)
# 案例:判断x保存的数据是否是数字数据
x = 123.5
print('x保存的数据是否是数字数据:', type(x) == int or type(x) == float)
3. not (逻辑非)
应用场景:
- 如果有一个条件正向写情况很多很复杂(不好写),反向却很简单的时候,就可以将条件反着写,然后在前面加 not
- 相当于生活中的或者
运算规则:
- not 条件
# 案例1:写出 age 是否不大于 18 的条件
age = 8
print(not age > 18)
print(age <= 18)
# 案例2:判断 num 是否不是偶数
num = 181
print(not num % 2 == 0)
print(num % 2 != 0)
# 案例3:判断num是否不能同时被3和7整除
# 正向分析:能被 3 整除但是不能被 7 整除;能被 7 整除但是不能被 3 整除;既不能被 3 整除也不能被 7 整除
# 方向条件:能同时被 3 和 7 整除
num = 89
print(not (num % 3 == 0 and num % 7 == 0))
重点:短路原则
- A and B,如果A为False,不需要计算B的值,整个表达式的结果为False
- A or B,如果A为True,不需要计算B的值,整个表达式的结果为True
- and和or混合使用
- 表达式从左往右运算,如果or的左侧为True,则会短路or后面所有的表达式【不管是and还是or连接】,整个表达式的结果为True
- 表达式从左往右运算,如果and的左侧为False,则短路后面所有的and,直到or出现,接着计算
- 如果or的左侧为False,或者and的左侧为True,则不能使用短路逻辑判断
注意:
- 逻辑运算符主要用于进行逻辑判断,所以一般结合 if 语句或 while 循环使用较多
- 逻辑运算符结合关系运算符使用较多
- 表示假的数据:0 0.0 "" [] () {} None False等,(只要为空都是False)
- not xx:不管xx是哪种数据类型,得到的结果肯定是布尔值
- and和or得到的结果不一定是布尔值,根据具体参与运算的数据而定