Python: 条件判断
上一课我们学会了如何用布尔逻辑做"是非判断",这一课就来学条件判断——让程序根据不同的条件执行不同的代码。这是所有编程语言中最核心的控制结构之一。
1. if 语句:最简单的条件判断
if 的格式很简单:
TEXT
📖 仅展示
if 条件:
条件成立时执行的代码
注意冒号 : 和缩进(通常 4 个空格)——缩进告诉 Python 哪些代码属于这个 if。
PYTHON
age = 18
if age >= 18:
print("你已经成年了!")
print("这条也是 if 内部的。")
print("这条在 if 外面,不管条件如何都会执行。")
运行结果:
TEXT
📖 仅展示
你已经成年了!
这条也是 if 内部的。
这条在 if 外面,不管条件如何都会执行。
💡 提示:Python 用缩进来表示代码块(其他语言用
{})。同一个 if 块里的代码缩进必须一致。如果你用过 C 或 Java,一开始会不习惯,但写多了你会发现:Python 强迫你写出整洁的代码。
▶ 示例:及格判断(难度⭐)
PYTHON
score = 75
if score >= 60:
print("恭喜,及格了!")
print(f"你的成绩是 {score} 分。")
print("成绩已记录。")
运行结果:
TEXT
📖 仅展示
恭喜,及格了!
你的成绩是 75 分。
成绩已记录。
2. if-else:二选一
当条件成立时做一件事,不成立时做另一件事:
TEXT
📖 仅展示
if 条件:
条件成立时执行
else:
条件不成立时执行
PYTHON
score = 45
if score >= 60:
print("及格了!")
else:
print("不及格,需要补考。")
运行结果:
TEXT
📖 仅展示
不及格,需要补考。
(1) if 和 else 的缩进
PYTHON
password = "123456"
if password == "123456":
print("密码正确,欢迎回来!")
else:
print("密码错误,请重试。")
print('如果是忘记密码,请点击"找回密码"。')
⚠️ 注意:
else 后面也有冒号 :,而且 else 必须和对应的 if 对齐(同一个缩进级别)。
3. if-elif-else:多选一
现实中往往不止两种情况。用 elif(就是 else if 的缩写)可以处理多个条件分支:
TEXT
📖 仅展示
if 条件1:
条件1成立时执行
elif 条件2:
条件2成立时执行
elif 条件3:
条件3成立时执行
else:
所有条件都不成立时执行
Python 会从上到下依次检查,遇到第一个成立的条件就执行对应的代码块,然后跳出整个 if-elif-else 结构,不再检查后面的条件。
PYTHON
score = 85
if score >= 90:
print("优秀!")
elif score >= 80:
print("良好!")
elif score >= 70:
print("中等。")
elif score >= 60:
print("及格。")
else:
print("不及格,需要补考。")
# 输出:良好!
💡 提示:注意条件顺序。如果写成
if score >= 60: 在最前面,那 85 分就会进入"及格"分支,永远不会到达"良好"和"优秀"。更严格的条件要写在前面。
▶ 示例:餐厅点餐系统(难度⭐⭐)
PYTHON
print("=== 今日套餐 ===")
print("1. 红烧牛肉面 ¥28")
print("2. 鱼香肉丝饭 ¥22")
print("3. 西红柿炒蛋饭 ¥18")
print("4. 蛋炒饭 ¥12")
choice = 3
if choice == 1:
print("您点了红烧牛肉面,共 28 元。")
elif choice == 2:
print("您点了鱼香肉丝饭,共 22 元。")
elif choice == 3:
print("您点了西红柿炒蛋饭,共 18 元。")
elif choice == 4:
print("您点了蛋炒饭,共 12 元。")
else:
print("抱歉,没有这个选项。")
print("祝您用餐愉快!")
运行结果:
TEXT
📖 仅展示
=== 今日套餐 ===
1. 红烧牛肉面 ¥28
2. 鱼香肉丝饭 ¥22
3. 西红柿炒蛋饭 ¥18
4. 蛋炒饭 ¥12
您点了西红柿炒蛋饭,共 18 元。
祝您用餐愉快!
4. 嵌套条件
条件里面还可以套条件。这叫做嵌套(nesting)。
PYTHON
age = 20
has_ticket = True
if age >= 18:
print("已成年,可以进入。")
if has_ticket:
print("有票,请入场。")
else:
print("请先购票。")
else:
print("未成年,禁止进入。")
运行结果:
TEXT
📖 仅展示
已成年,可以进入。
有票,请入场。
(1) 嵌套的层级不要太深
嵌套本身没问题,但嵌套超过 3 层代码就很难读了。下面的代码虽然功能正确,但看起来像一团乱麻:
PYTHON
# ❌ 不推荐:嵌套太深
user_input = "y"
is_admin = True
has_permission = True
if user_input == "y":
if is_admin:
if has_permission:
print("操作成功!")
else:
print("没有权限。")
else:
print("不是管理员。")
else:
print("操作已取消。")
可以用逻辑运算符把它展平:
PYTHON
# ✅ 推荐:用 and 减少嵌套
user_input = "y"
is_admin = True
has_permission = True
if user_input != "y":
print("操作已取消。")
elif is_admin and has_permission:
print("操作成功!")
else:
print("权限不足。")
💡 提示:一个实用的经验法则——如果嵌套超过 3 层,就可以考虑用
and/or 合并条件,或者把深层逻辑提取成函数。好的代码是"平的",不是"深的"。
▶ 示例:计算运费(难度⭐⭐)
PYTHON
# 根据地区、重量和会员等级计算运费
region = "国内" # "国内" 或 "国外"
weight = 3.5 # 公斤
is_vip = False
if region == "国内":
if weight <= 1:
shipping = 10
elif weight <= 5:
shipping = 15
else:
shipping = 20
else:
if weight <= 1:
shipping = 50
elif weight <= 5:
shipping = 80
else:
shipping = 120
# 会员打 8 折
if is_vip:
shipping *= 0.8
print(f"地区:{region}")
print(f"重量:{weight}kg")
print(f"运费:{shipping:.0f} 元")
运行结果:
TEXT
📖 仅展示
地区:国内
重量:3.5kg
运费:15 元
5. 三元表达式(条件表达式)
Python 有一种一行写完 if-else 的写法,叫做三元表达式:
PYTHON
# 常规写法
age = 20
if age >= 18:
status = "成年"
else:
status = "未成年"
# 三元表达式写法(一行搞定)
status = "成年" if age >= 18 else "未成年"
print(status) # 成年
它的结构是:
TEXT
📖 仅展示
值1 if 条件 else 值2
条件为真时取值1,为假时取值2。
(1) 实际应用
PYTHON
# 根据分数输出评语
score = 88
result = "及格" if score >= 60 else "不及格"
print(f"考试结果:{result}") # 考试结果:及格
# 查找默认值
name = input("请输入你的名字:") or "游客"
greeting = f"你好,{name}" if name else "你好,游客"
print(greeting)
⚠️ 注意:三元表达式虽然简洁,但不要滥用。如果判断逻辑复杂(比如需要
elif),或者分支较长,还是用常规的 if-elif-else 更清晰。简洁 ≠ 可读。
6. pass:什么都不做
有时候你需要一个代码块的"占位符"——语法上需要写代码,但你还没想好具体写什么。这时候用 pass:
PYTHON
age = 20
if age >= 18:
pass # TODO:以后加上成年人的逻辑
else:
print("未成年,不能注册。")
pass 就是"这里啥也不干,继续往下走"的意思。它经常用于:
- 临时占位:先把程序结构搭好,细节以后再补
- 定义空函数:
def my_function(): pass - 定义空类:
class MyClass: pass
TEXT
📖 仅展示
# 在实际开发中,你可能这样用
if user_age >= 18:
register_user() # 直接注册
else:
pass # 暂时不对未成年做特殊处理
💡 提示:如果你用 VS Code,可以在
pass 的位置写个 # TODO 注释,VS Code 会帮你整理所有的待办事项,方便以后回来处理。
7. 常见应用场景
- 表单验证:检查用户输入是否为空、格式是否正确、长度是否达标。
- 权限分级:普通用户看到 A 界面,VIP 用户看到 B 界面,管理员看到 C 界面。
- 游戏状态机:判断游戏是否结束、是否通关、是否获得成就。
- 价格计算:满减优惠、会员折扣、季节促销——不同的条件组合得出不同的最终价格。
- 菜单导航:用户在控制台输入 1/2/3/4,程序进入不同的功能模块。
❓ 常见问题
Q
elif 和 if 有什么区别?为什么不能全用 if?A
elif 和 if 最大的区别是:elif 是在前面的条件不满足时才检查,而独立的 if 不管前面有没有成立都会检查。如果你写三个独立的 if,在分数 85 时"优秀"、"良好"、"中等"三个 if 全都会执行;如果用 if-elif-elif,只会执行第一个满足条件的"良好"分支。需要"多选一"时用 elif,需要"独立判断多个条件"时用多个 if。Q
pass 和 return 有什么区别?A
pass 是"什么都不做,继续往下执行";return 是"立即结束当前函数,返回一个值"(后面会学)。在 if 块里放 pass,程序会跳过这个块继续执行后面的代码。在函数里放 return,程序会立刻跳出函数并返回结果。它们是完全不同的概念。📖 小节
if后跟条件,条件成立则执行缩进块内的代码else处理条件不成立的情况,不能单独使用elif处理多个条件分支,从上到下依次检查,遇到第一个成立的即执行- 嵌套条件可以处理复杂的层级关系,但嵌套不要超过 3 层
- 三元表达式
x if 条件 else y一行搞定简单的二选一 pass是占位符,用于语法上需要代码但实际什么都不想做的场景- 良好习惯:严格条件写前面、嵌套控制不超过 3 层、能用
and/or展平就别嵌套
📝 作业
-
基础题(难度⭐):写一个判断奇偶数的程序。输入一个整数,如果是奇数输出"奇数",如果是偶数输出"偶数"。提示:
n % 2 == 0是偶数。 -
进阶题(难度⭐⭐):写一个"基于 BMI 的健康评估程序"。输入体重(kg)和身高(m),计算 BMI,然后输出:
- BMI < 18.5 → "偏瘦"
- 18.5 ≤ BMI < 24 → "正常"
- 24 ≤ BMI < 28 → "偏胖"
- BMI ≥ 28 → "肥胖"
-
挑战题(难度⭐⭐⭐):写一个"简单计算器"。程序接收三个输入:第一个数字、运算符(
+-*/)、第二个数字。根据运算符执行对应的运算并输出结果。需要注意:- 如果运算符是
/且第二个数字为 0,输出"除数不能为 0" - 如果运算符不是
+-*/中的任何一个,输出"无效运算符" - 其他情况正常输出计算结果
- 如果运算符是