九、逻辑运算符学习笔记
2026-02-19
Python基础
type
Post
status
Published
date
Feb 19, 2026
slug
python-logical-operators-notes-9
summary
我觉得 and、or、not 这三个单词很简单,但实际用起来才发现坑很多!特别是短路特性和优先级,让我调试了好久。不过掌握之后,写复杂条件判断就轻松多了,代码也更简洁优雅。就像是给 if 语句装上了"组合拳"!
tags
Python数据的存储与运算
Python的逻辑处理
category
Python基础
icon
password
💡 学习感悟:我觉得 and、or、not 这三个单词很简单,但实际用起来才发现坑很多!特别是短路特性和优先级,让我调试了好久。不过掌握之后,写复杂条件判断就轻松多了,代码也更简洁优雅。就像是给 if 语句装上了"组合拳"!
1. 什么是逻辑运算符?
我的理解
现实世界的判断往往不是单一条件,而是多个条件的组合:
- "年龄大于18岁并且成绩及格"
- "是会员或者消费满100元"
- "不是禁用用户"
逻辑运算符就是用来组合这些条件的工具,让程序能处理更复杂的判断逻辑。
📝 我的理解:逻辑运算符就像是条件的粘合剂——把多个简单的条件粘合成一个复杂的判断。没有它们,if 语句就只能做简单的判断了。
2. 逻辑运算符一览
运算符 | 名称 | 描述 | 示例 | 结果 |
and | 与 | 两个条件都为 True 时返回 True | True and False | False |
or | 或 | 至少一个条件为 True 时返回 True | True or False | True |
not | 非 | 对条件取反 | not True | False |
3. 逻辑与 and
3.1 什么是逻辑与?
逻辑与(and)表示"并且"的关系,只有当所有条件都为 True 时,结果才为 True。
📝 我的理解:and 就像是串联电路——所有开关都闭合(True),电路才通;只要有一个断开(False),电路就断了。
3.2 实际应用场景
📝 我的理解:and 适合"必须同时满足"的场景。比如登录验证,用户名和密码必须同时正确才能登录,用 and 很自然。
4. 逻辑或 or
4.1 什么是逻辑或?
逻辑或(or)表示"或者"的关系,只要有一个条件为 True,结果就为 True。
📝 我的理解:or 就像是并联电路——只要有一个开关闭合(True),电路就通;只有全部断开(False),电路才断。
4.2 实际应用场景
📝 我的理解:or 适合"满足其中一个就行"的场景。比如优惠活动,是 VIP 或者消费满100元都能享受,用 or 很合适。
5. 逻辑非 not
5.1 什么是逻辑非?
逻辑非(not)表示"取反",将 True 变为 False,将 False 变为 True。
📝 我的理解:not 就像是拍照的负片效果——黑的变白,白的变黑。在编程中,not 经常用来检查"不满足某个条件"的情况。
5.2 实际应用场景
📝 我的理解:not 特别适合反向判断的场景。比如检查"是否为空"、"是否未完成",用 not 比写== False或== ""更简洁 Pythonic。
6. 逻辑运算符的组合使用
6.1 复杂条件判断
📝 我的理解:组合使用的时候,括号很重要!就像数学运算一样,括号可以改变优先级。上面的例子中,is_member and (order_amount >= 100 or is_special_item)和(is_member and order_amount >= 100) or is_special_item是完全不同的意思!
6.2 德摩根定律
📝 我的理解:德摩根定律是数学里的知识,但在编程中也很实用。有时候把not (A and B)改成(not A) or (not B)会让逻辑更清晰。不过初学者不用强求,先掌握基本用法就好。
7. 短路特性
7.1 什么是短路特性?
逻辑运算符具有"短路"特性:如果已经能确定最终结果,就不会继续计算后面的条件。
📝 我的理解:短路特性就像是提前交卷——如果已经知道答案了,后面的题就不用做了。这个特性很有用,可以避免一些错误,还能用来设置默认值。
7.2 and 的短路特性
⚠️ 踩坑记录:我第一次发现短路特性是在调试代码的时候,明明后面的条件会报错,但程序却正常运行了!后来才明白,and 的第一个条件为 False 时,后面的根本不会执行。这个特性可以用来避免空值错误。
7.3 or 的短路特性
📝 我的理解:or 的短路特性很酷!username = input() or "匿名用户"这种写法非常 Pythonic。如果用户输入了内容,就用输入的内容;如果直接回车(空字符串),就用默认值。这种写法比写 if-else 简洁多了。
8. 逻辑运算符的优先级
8.1 优先级顺序
not(最高)
and
or(最低)
⚠️ 踩坑记录:优先级是我踩过最多的坑!特别是not的优先级最高,我经常搞错。现在我养成了一个习惯:不管优先级是什么,都用括号明确分组。这样代码更易读,也不容易出错。
9. 实际应用案例
9.1 用户登录验证(完整版)
📝 我的理解:这个登录验证用到了所有的逻辑运算符!not username检查是否为空,or检查用户名或密码是否正确,not is_active检查账号状态。逻辑很清晰,一步步排除错误情况。
9.2 成绩等级评定(复杂条件)
📝 我的理解:成绩评定用到了嵌套的逻辑运算。比如"优秀"的条件是平均分 >= 90 并且每科都 >= 85,这种复杂的条件用 and 和 or 组合起来表达很清晰。
9.3 游戏角色状态判断
📝 我的理解:游戏状态判断是逻辑运算符的经典应用场景。不同的状态组合触发不同的警告,用 and、or、not 组合起来表达很自然。
9.4 表单验证
📝 我的理解:表单验证用到了短路特性!not age.isdigit() or not (18 <= int(age) <= 100)中,如果age.isdigit()为 False(不是数字),后面的int(age)不会执行,避免了类型转换错误。
10. 遇到的问题和解决
10.1 混淆 and 和 or
⚠️ 踩坑记录:这个错误我犯过!想表达"年龄在18到60之间",结果写成了or,变成"年龄大于18 或者 小于60",这几乎包含了所有年龄!记住:范围判断用 and,多选一才用 or。
10.2 优先级错误
⚠️ 踩坑记录:and的优先级比or高,所以True or False and False会先算False and False。如果不确定优先级,一律用括号!
10.3 忘记使用括号
⚠️ 踩坑记录:没有括号的复杂条件很难读,也容易出错。我现在的原则是:超过两个条件就用括号分组,哪怕优先级是对的,也要让代码更易读。
10.4 与位运算符混淆
⚠️ 踩坑记录:从其他语言转过来的同学要注意,Python 里&是位运算符(按位与),and才是逻辑运算符。虽然有时候结果一样,但逻辑完全不同!
11. 核心知识点整理
11.1 逻辑运算符速查表
运算符 | 含义 | 口诀 | 类比 |
and | 并且 | 一假则假,全真才真 | 串联电路 |
or | 或者 | 一真则真,全假才假 | 并联电路 |
not | 非 | 真假互换 | 拍照负片 |
11.2 短路特性
and短路:第一个为 False,直接返回 False,不检查后面
or短路:第一个为 True,直接返回 True,不检查后面
- 用途:避免错误、设置默认值
11.3 优先级
建议:复杂条件一律用括号,提高可读性。
11.4 常见错误总结
错误类型 | 错误示例 | 正确写法 |
范围判断用 or | age >= 18 or age <= 60 | age >= 18 and age <= 60 |
混淆 & 和 and | a > 0 & b > 0 | a > 0 and b > 0 |
复杂条件无括号 | A and B or C and D | (A and B) or (C and D) |
忘记短路特性 | if name: if len(name) > 0 | if name and len(name) > 0 |
11.5 需要注意的条件
and:必须同时满足多个条件
or:满足其中一个条件即可
not:反向判断、检查空值
Loading...
