Python基础:逻辑运算符
一、知识点详解
1.1 逻辑运算符功能
运算符 | 名称 | 功能 | 示例 | 结果 |
---|---|---|---|---|
and | 逻辑与 | 所有条件同时为真时返回True ,否则False | (5 > 3) and (2 < 4) | True |
or | 逻辑或 | 至少一个条件为真时返回True ,全假返回False | (5 < 3) or (2 > 4) | False |
not | 逻辑非 | 反转布尔值(True 变False ,False 变True ) | not (5 == 5) | False |
1.2 真值表(逻辑运算规则)
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 |
记忆口诀:
and
:有假则为假or
:有真则为真not
:真假互换
1.3 运算优先级
从高到低(建议用 ()
明确优先级):
()
(括号)not
(逻辑非)and
(逻辑与)or
(逻辑或)
print(True or False and not True)
# 等效于:True or (False and (not True)) → 结果:True
1.4 短路评估
and
:若左侧为False
,右侧表达式不再执行(整体必为False
)。or
:若左侧为True
,右侧表达式不再执行(整体必为True
)。
def check():
print("函数被调用")
return True
print(False and check()) # 输出:False(函数未执行)
print(True or check()) # 输出:True(函数未执行)
二、说明示例
2.1 复合条件判断(年龄与成绩筛选)
age = int(input("年龄:"))
score = int(input("成绩:"))
is_qualified = (age >= 18) and (score >= 60)
print("是否合格:", is_qualified)
2.2 输入验证(非字母数字检测)
char = input("输入一个字符:")
is_special = not (char.isalpha() or char.isdigit())
# str.isalpha():判断是否为字母;str.isdigit():判断是否为数字
print("是否为特殊字符:", is_special)
2.3 优先级调整(明确逻辑顺序)
condition = (age > 12 and age < 20) or (score > 90)
# 清晰表达:(青少年)或(高分者)
三、知识点总结
- 核心规则:
and
:全真为真,否则为假;or
:一真为真,全假为假;not
:反转布尔值。
- 优先级:
not > and > or
,建议用()
避免歧义。 - 关键应用:
- 用户输入验证(如格式检测);
- 复合条件筛选(如年龄、分数区间组合)。
- 易错点:
- 忽略优先级导致逻辑错误(如
x > 5 or x < 0 and y == 10
需加括号); - 短路评估影响代码执行(右侧含函数调用时需注意)。
- 忽略优先级导致逻辑错误(如
四、扩展知识
4.1 德摩根定律
简化复杂逻辑表达式
“非
(A 且
B)” 等价于 “非
A 或 非
B” ,即
not (A and B)
= not A or not B
“非
(A 或
B)” 等价于 “非
A 且 非
B” , 即
not (A or B)
= not A and not B
age = 20
score = 55
# 原条件:年龄<18 或 成绩<60 → 不合格
is_fail = (age < 18) or (score < 60)
# 德摩根转换:not (age >=18 and score >=60)
4.2 位运算符(了解)
位运算符直接对整数的二进制位进行操作,速度极快,适用于底层优化(如标志位处理)。
常见位运算符
运算符 | 名称 | 功能描述 | 示例 | 结果 |
---|---|---|---|---|
& | 按位与 | 两位均为1时结果为1,否则为0 | 5 & 3 (101 & 011 ) | 1 |
| | 按位或 | 两位中有1时结果为1 | 5 | 3 (101 | 011 ) | 7 |
^ | 按位异或 | 两位不同时结果为1,相同时为0 | 5 ^ 3 (101 ^ 011 ) | 6 |
~ | 按位取反 | 二进制位取反(0变1,1变0),结果等价于 -x - 1 | ~5 | -6 |
<< | 左移 | 二进制位左移指定位数,右侧补0(等价于乘以 2^n ) | 5 << 2 | 20 |
>> | 右移 | 二进制位右移指定位数,左侧补符号位(正数补0,负数补1,等价于整除 2^n ) | 20 >> 2 | 5 |
核心特点
- 操作对象:仅适用于整数(自动转为二进制处理)。
- 优先级:低于算术运算符(如
+
、*
),高于比较运算符(如>
)。 - 注意事项:右移负数时高位补1,过度使用可能降低代码可读性。
五、知识点考察题
a = 5
b = 3
c = 0
result = a > b or c and a / c > 0
以上代码输出输出结果():
A. True
B. False
C. 报错 ZeroDivisionError
D. 0