核心概念
要理解 and 和 or 是逻辑运算符,它们用于连接布尔表达式(结果为 True 或 False 的表达式)。

and(与): 所有连接的条件都必须为True,整个表达式的结果才为True,只要有一个是False,结果就是False。or(或): 只要连接的条件中有一个为True,整个表达式的结果就为True,只有所有条件都是False,结果才是False。
if 与 and 的组合
当你需要检查所有条件是否同时满足时,使用 and。
语法:
if condition1 and condition2:
# 当 condition1 和 condition2 都为 True 时,执行这里的代码
...
示例:
假设我们想判断一个变量 age 是否代表一个合法的成年人(年龄在 18 岁到 60 岁之间,包括 18 和 60)。
age = 25
has_id = True
# 使用 and 连接两个条件
if age >= 18 and age <= 60 and has_id:
print("此人年龄在18到60岁之间,并且有身份证,是合法成年人。")
else:
print("不满足条件。")
# 输出: 此人年龄在18到60岁之间,并且有身份证,是合法成年人。
工作原理:

age >= 18的结果是True。age <= 60的结果是True。has_id的结果是True。True and True and True的最终结果是True,if代码块被执行。
如果任何一个条件不满足,age = 15:
True and False and True 的结果是 False,if 代码块就不会被执行。
if 与 or 的组合
当你需要检查至少有一个条件满足时,使用 or。
语法:
if condition1 or condition2:
# 当 condition1 或 condition2 中至少有一个为 True 时,执行这里的代码
...
示例: 假设一个网站只允许管理员或VIP用户访问。

user_role = "editor" # 可以是 "admin", "vip", "guest"
is_logged_in = True
# 使用 or 连接两个条件
if user_role == "admin" or user_role == "vip":
print("欢迎访问!您拥有管理员或VIP权限。")
else:
print("访问被拒绝,您需要管理员或VIP权限。")
# 输出: 欢迎访问!您拥有管理员或VIP权限。
工作原理:
user_role == "admin"的结果是False。user_role == "vip"的结果是False。False or False的最终结果是False,else代码块被执行。
user_role 是 "admin":
True or False 的结果是 True,if 代码块就会被执行。
if、and、or 的混合使用
在复杂的逻辑判断中,你常常需要同时使用 and 和 or。这时,and 的优先级高于 or,这和数学中乘法优先级高于加法类似。
示例 1: 理解优先级
# 假设条件如下
a = True
b = False
c = True
d = False
# 这个表达式会被 Python 解释为 (a and b) or (c and d)
if a and b or c and d:
print("这个代码块被执行了吗?")
else:
print("这个代码块被执行了。")
执行步骤:
- 先计算
and:a and b->True and False->Falsec and d->True and False->False
- 再计算
or:False or False->False
- 因为最终结果是
False,else代码块被执行。
示例 2: 实际应用场景
假设我们要定义一个“活跃用户”:
- 条件A: 登录状态为
True - 条件B1: 用户等级是 "premium"
- 条件B2: 用户等级是 "gold"
- 条件C: 用户积分超过 1000
逻辑是: 用户必须登录,并且满足 (等级是 premium 或 gold) 或 积分超过 1000。
is_logged_in = True
user_level = "gold"
user_points = 500
# 逻辑分解:
# 1. 检查用户是否登录 (is_logged_in)
# 2. 检查用户是否满足以下任一条件:
# a. 等级是 "premium" 或 "gold" (user_level == "premium" or user_level == "gold")
# b. 积分超过 1000 (user_points > 1000)
# 3. 将第1步和第2步用 and 连接
if is_logged_in and (user_level == "premium" or user_level == "gold" or user_points > 1000):
print("该用户是活跃用户。")
else:
print("该用户不是活跃用户。")
# 输出: 该用户是活跃用户。
为什么需要括号 ?
为了确保 or 运算先执行,我们将它们括起来,如果不加括号,根据 and 优先级更高的规则,表达式会变成这样:
# 错误的逻辑!
if is_logged_in and user_level == "premium" or user_level == "gold" or user_points > 1000:
# 这会被解释为: (is_logged_in and user_level == "premium") or user_level == "gold" or user_points > 1000
# 这意味着,即使用户没有登录,只要他的等级是 "gold",这个条件也会为 True,这不符合我们的初衷。
...
最佳实践:
当混合使用 and 和 or 时,强烈建议使用括号 来明确你的意图,这不仅能让代码逻辑更清晰,也能避免因优先级问题导致的难以发现的 bug。
提高可读性的技巧
当条件变得很长很复杂时,直接写在一行里会难以阅读,Python 提供了一种更优雅的方式来处理这种情况:在括号内换行。
示例:
# 一行写法,虽然能运行,但可读性差
if (age >= 18 and age <= 60 and has_id and (user_level == "vip" or user_points > 1000)):
print("条件满足")
# 推荐的多行写法,可读性极高
if (
age >= 18
and age <= 60
and has_id
and (user_level == "vip" or user_points > 1000)
):
print("条件满足")
这种写法让每个条件都独占一行,逻辑一目了然,非常适合复杂的条件判断。
| 组合方式 | 用途 | 示例 | 优先级/注意事项 |
|---|---|---|---|
if and |
所有条件必须同时为真 | if x > 0 and y < 10: |
and 优先级高于 or |
if or |
至少有一个条件为真 | if day == "Saturday" or day == "Sunday": |
混合使用时,注意括号 |
if and or |
复杂逻辑组合 | if (A and B) or (C and D): |
强烈建议使用括号来明确逻辑顺序 |
| 多行条件 | 提高复杂条件的可读性 | if (condition1<br> and condition2<br> or condition3): |
在括号内换行,是 Pythonic 的写法 |
掌握 if、and、or 的组合是编写健壮、清晰代码的基础,关键在于理解每个运算符的含义,并善用括号和换行来组织你的逻辑。
