if判断
# if 判断
在编程世界中,程序需要根据不同的情况做出不同的反应。if
语句就是 Python 用来实现这种逻辑决策的核心工具,它允许你的代码根据特定条件的真假来选择执行哪一个代码块。
# 1. 核心概念:真值测试 (Truthiness)
在深入 if
语句之前,必须理解 Python 如何判断事物的“真”与“假”,这个概念被称为真值测试。在条件判断中,Python 会自动将任何表达式或变量的值评估为一个布尔值 (True
或 False
)。
# 被视为 False
的值:
- 布尔值
False
本身。 - 特殊常量
None
。 - 任何数值类型的零:
0
,0.0
,0j
。 - 任何空的序列或集合:
""
(空字符串),[]
(空列表),()
(空元组),{}
(空字典),set()
(空集合)。
除了以上这些,其他所有值都被视为
True
!
def check_truthiness(value):
if value:
print(f"'{value}' 被视为 True")
else:
print(f"'{value}' 被视为 False")
check_truthiness(1) # 输出: '1' 被视为 True
check_truthiness("Hello") # 输出: 'Hello' 被视为 True
check_truthiness([1, 2]) # 输出: '[1, 2]' 被视为 True
check_truthiness(0) # 输出: '0' 被视为 False
check_truthiness("") # 输出: '' 被视为 False
check_truthiness(None) # 输出: 'None' 被视为 False
check_truthiness([]) # 输出: '[]' 被视为 False
2
3
4
5
6
7
8
9
10
11
12
13
14
# 2. 基本 if
语句:最简单的决策
这是最基础的条件判断形式。如果条件为 True
,则执行紧跟的缩进代码块;否则,直接跳过。
语法结构:
if condition: # 条件为 True 时执行的代码 ...
1
2
3示例:
age = 20 if age >= 18: print("你已经成年,可以进入。") # 输出: 你已经成年,可以进入。 temperature = 15 if temperature < 20: print("天气有点冷,记得多穿一件衣服。") # 输出: 天气有点冷,记得多穿一件衣服。
1
2
3
4
5
6
7
# 3. if-else
语句:二选一的抉择
当你需要在条件成立和不成立时分别执行不同的操作,if-else
结构就派上用场了。
语法结构:
if condition: # 条件为 True 时执行的代码 ... else: # 条件为 False 时执行的代码 ...
1
2
3
4
5
6示例:
score = 75 if score >= 60: print("恭喜你,考试及格!") # 输出: 恭喜你,考试及格! else: print("很遗憾,考试未及格,请继续努力。")
1
2
3
4
5
# 4. if-elif-else
语句:多路分支的选择
当有多个互斥的条件需要判断时,使用 if-elif-else
结构可以使代码逻辑清晰。Python 会从上到下依次检查每个条件,一旦找到第一个为 True
的条件,便执行其对应的代码块,然后跳出整个结构。
语法结构:
if condition_1: # 条件1为 True 时执行 ... elif condition_2: # 条件1为 False,但条件2为 True 时执行 ... elif condition_3: # ...以此类推 ... else: # 所有以上条件都为 False 时执行 (可选) ...
1
2
3
4
5
6
7
8
9
10
11
12示例:成绩评级
score = 88 if score >= 90: grade = "优秀" elif score >= 80: grade = "良好" # score=88 满足此条件,程序进入此分支后结束判断 elif score >= 60: grade = "及格" else: grade = "不及格" print(f"你的成绩等级是: {grade}") # 输出: 你的成绩等级是: 良好
1
2
3
4
5
6
7
8
9
10
11
# 5. 嵌套 if
语句:层层递进的逻辑
if
语句内部可以包含另一个 if
语句,形成嵌套结构,用于处理更复杂的、有层次的逻辑。
- 示例:会员折扣
is_vip = True order_total = 120 if order_total > 100: print("订单金额超过100元。") # 输出: 订单金额超过100元。 if is_vip: print("你是VIP,享受额外折扣!") # 输出: 你是VIP,享受额外折扣! else: print("成为VIP,享受更多优惠。") else: print("订单金额未满100元。")
1
2
3
4
5
6
7
8
9
10
11
编码建议:嵌套不宜超过两到三层。如果嵌套过深,应考虑重构代码,比如使用函数或更清晰的逻辑运算符组合。
# 6. 组合条件:and
, or
, not
使用逻辑运算符可以组合多个条件,形成更强大的判断逻辑。
# 6.1 and
:所有条件都为真
当且仅当 and
两边的条件都为 True
时,整个表达式才为 True
。
age = 25
has_ticket = True
if age >= 18 and has_ticket:
print("验证通过,欢迎入场。") # 输出: 验证通过,欢迎入场。
2
3
4
# 6.2 or
:至少一个条件为真
只要 or
两边的条件中至少有一个为 True
,整个表达式就为 True
。
has_coupon = False
is_first_time_user = True
if has_coupon or is_first_time_user:
print("你可以享受折扣。") # 输出: 你可以享受折扣。
2
3
4
# 6.3 not
:反转逻辑
not
用于反转一个布尔值。not True
结果是 False
,not False
结果是 True
。
is_logged_in = False
if not is_logged_in:
print("请先登录。") # 输出: 请先登录。
2
3
# 6.4 短路求值 (Short-circuiting)
这是一个非常重要的优化特性:
A and B
:如果 A 为False
,Python 知道整个表达式必为False
,所以根本不会去计算 B。A or B
:如果 A 为True
,Python 知道整个表达式必为True
,所以根本不会去计算 B。
# 示例:利用短路避免错误
user = None
# 因为 user 是 None (False),`and` 后面的 user.is_admin 就不会被执行,从而避免了 AttributeError
if user and user.is_admin:
print("管理员,你好!")
else:
print("访客,你好!") # 输出: 访客,你好!
2
3
4
5
6
7
# 7. 三元条件运算符 (Ternary Operator):简洁的单行 if-else
对于简单的 if-else
赋值操作,可以使用一种更简洁的单行写法。
语法结构:
value_if_true if condition else value_if_false
示例:
age = 20 status = "成年人" if age >= 18 else "未成年人" print(status) # 输出: 成年人
1
2
3
# 8. 最佳实践与常见陷阱
使用
is None
进行 None 值判断: 判断一个变量是否为None
时,应始终使用is None
或is not None
,而不是== None
。这是 Python 社区的约定,也更高效。善用真值测试简化代码:
my_list = [] # 不推荐 if len(my_list) == 0: print("列表为空") # 推荐 if not my_list: print("列表为空") # 输出: 列表为空
1
2
3
4
5
6
7
8避免过深的嵌套: 过深的
if
嵌套会使代码难以阅读和维护。可以尝试使用elif
、逻辑运算符组合,或将内部逻辑封装成函数来优化。保持缩进一致: Python 严格依赖缩进(通常是4个空格)来定义代码块。缩进错误是初学者最常见的错误之一,会导致
IndentationError
。
# 9. 综合实战案例:简单的用户验证系统
# 模拟一个用户数据库
users = {"alice": {"password": "123", "is_active": True}, "bob": {"password": "456", "is_active": False}}
username = input("请输入用户名: ")
# 1. 检查用户名是否存在 (利用真值测试)
user_data = users.get(username) # .get() 在键不存在时返回 None (False)
if user_data:
# 2. 检查用户是否被禁用 (使用 not)
if not user_data["is_active"]:
print("错误:该账户已被禁用。")
else:
# 3. 验证密码
password = input("请输入密码: ")
if password == user_data["password"]:
print(f"欢迎回来, {username.capitalize()}!")
else:
print("错误:密码不正确。")
else:
print("错误:用户不存在。")
# 场景1 输入: alice, 123 -> 输出: 欢迎回来, Alice!
# 场景2 输入: bob -> 输出: 错误:该账户已被禁用。
# 场景3 输入: charlie -> 输出: 错误:用户不存在。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24