💰 读完这篇,你每天能早下班 1 小时
> 📅 学习时间:40 分钟 | 🎯 核心收获:掌握条件判断 + 避开嵌套陷阱 + 写出优雅代码
📌 一句话总结(没时间看完就转这个)
if 语句不是越详细越好,是越简洁越好。 90% 的新手会写 10 层嵌套 if,老手只用 3 层。学会今天的 3 个技巧,代码量能少一半,维护时间从 2 小时降到 5 分钟——这意味着你每天能早下班 1 小时,一个月多休 3 天。
⚠️ 0 基础读者先看这里(2 分钟)
如果你第一次学 if 语句,建议先花 2 分钟了解基础:
if 是什么?
if = "如果"就像你每天早上出门前:
如果下雨 → 带伞
如果晴天 → 戴墨镜
编程里的 if 也是一样:
# 如果下雨,就带伞
if 下雨:
带伞
生活里的 if 语句
你每天都在用 if,只是不知道:
如果 闹钟响了 → 起床
否则 → 继续睡如果 地铁来了 → 上车
否则 → 等下一班如果 工资到账 → 开心
否则 → 等明天
基本语法
if 条件: # 冒号不能少
执行的代码 # 缩进不能少
:2. 下面的代码必须缩进(4 个空格或 1 个 Tab)
最简单例子
age = 20
if age >= 18:
print("你已成年")
你已成年
if-else:如果...否则...
age = 16
if age >= 18:
print("你已成年")
else:
print("你未成年")
你未成年
比较运算符
| 符号 | 含义 | 示例 | 结果 |
|---|---|---|---|
>= | 18 >= 18 | ||
<= | 16 <= 18 |
看懂了继续往下,学习如何写出优雅的 if 语句。
先把上面的例子抄到 Python 里运行一下,再回来。
🎯 从一个真实故事开始
上周有个学员找我,声音都是抖的:
"小雪,我写的购票系统,老板说要重构。代码太多了,看不懂。我已经连续加班两周了,每天改 bug 改到晚上 10 点。"
我让他发过来一看——50 层 if 嵌套。
# 他的代码(简化版)
if age >= 6:
if age < 18:
if is_student:
if has_card:
if card_type == "A":
# ... 还有 45 层
# 优化后
if age < 6:
return "儿童免票"
elif age < 18:
return "儿童票" if is_student else "全价票"
elif age >= 60:
return "老年票"
else:
return "学生票" if is_student else "全价票"
优化前:200 行代码,维护 2 小时,每天加班到 10 点
优化后:50 行代码,维护 5 分钟,下午 6 点准时下班
效率提升 24 倍,相当于一个月多休 3 天
"现在改功能只要改一个地方,5 分钟搞定。老板以为我开了挂,其实我只是学会了这 3 个技巧。 终于能陪孩子吃晚饭了。"
今天这篇,帮你把条件判断搞明白。学完后,你将能够:
✅ 说清楚 if 语句的本质
✅ 避开 90% 人都会踩的嵌套陷阱
✅ 用 3 个技巧写出优雅代码
✅ 一眼看出哪些 if 可以优化
📖 核心概念
先破个误区:if 越多=考虑越周全?
很多人写 if,觉得"多写几个总没错"。
错。if 越多,代码越难维护,bug 越多。关键区别:
新手思维:老手思维:
多写 if 总没错
覆盖所有情况
代码=200 行
能少写就少写
优先处理特殊情况
代码=50 行
if 语句的本质
if 不是"判断",是"选择"。就像你每天早上出门:
下雨 → 带伞
晴天 → 戴墨镜
多云 → 什么都不带
需求来了 → 评估优先级
老板催了 → 沟通预期
同事求助 → 判断帮不帮
速查表:条件判断写法对比
| 写法 | 代码行数 | 可读性 | 推荐场景 | 下班时间 |
|---|---|---|---|---|
| 10 层嵌套 | 100+ 行 | ❌ 极差 | 避免使用 | 22:00+ |
| if-elif-else | 20 行 | ✅ 好 | 一般场景 | 18:30 |
| 字典映射 | 10 行 | ✅✅ 极好 | 多分支场景 | 18:00 |
| 提前返回 | 15 行 | ✅✅ 极好 | 函数内部 | 18:00 |
💡 经验法则:if 嵌套不要超过 3 层,超过就要优化。优化一层,早走 10 分钟。
💻 代码实战:40 分钟跑起来
实战 1:写对第一个 if
别一上来就写嵌套,先学会提前返回:
# ❌ 新手写法:嵌套 3 层
def check_login(user, pwd):
if user isnotNone:
if pwd isnotNone:
if user == "admin" and pwd == "123456":
return True
else:
return False
else:
return False
else:
returnFalse
# ✅ 老手写法:提前返回
def check_login(user, pwd):
# 先处理异常情况
if user isNone or pwd isNone:
return False
# 主逻辑一目了然
return user == "admin" and pwd == "123456"
新手:15 行,嵌套 3 层,读代码要花 10 分钟
老手:5 行,无嵌套,读代码只要 1 分钟
代码少 67%,省下的时间可以喝杯咖啡
就像你出门前检查:
> - 没带钥匙?→ 回去拿(提前返回)
> - 没带手机?→ 回去拿(提前返回)
> - 都带了?→ 出门(主逻辑)
实战 2:用 if-elif-else 代替多层嵌套
别再用 if 套 if 了,试试扁平化:
# ❌ 新手写法:嵌套 5 层
def get_ticket_price(age, is_student, has_card):
if age >= 6:
if age < 18:
if is_student:
if has_card:
return 25
else:
return 50
else:
return50
else:
if age >= 60:
return50
else:
return100
else:
return0
# ✅ 老手写法:if-elif-else 扁平化
def get_ticket_price(age, is_student, has_card):
if age < 6:
return 0 # 儿童免票
elif age < 18:
return 25 if is_student and has_card else 50
elif age >= 60:
return 50 # 老年票
else:
return 25 if is_student else 100
新手:20 行,嵌套 5 层,看一遍要 5 分钟
老手:8 行,无嵌套,看一遍只要 30 秒
代码少 60%,省下的时间可以刷个短视频
就像你去电影院买票:
> - 先问年龄(儿童/成人/老人)
> - 再问身份(学生/非学生)
> - 最后问有没有优惠卡
>
> 不是一层层嵌套,是按顺序排除。
实战 3:用字典映射代替多分支
如果分支超过 5 个,试试字典映射:
# ❌ 新手写法:if-elif 写 10 个
def get_discount(member_type):
if member_type == "A":
return 0.5
elif member_type == "B":
return 0.6
elif member_type == "C":
return 0.7
elif member_type == "D":
return 0.8
elif member_type == "E":
return 0.9
elif member_type == "F":
return 0.95
elif member_type == "G":
return 0.98
elif member_type == "H":
return 0.99
elif member_type == "I":
return 1.0
else:
return 1.0
# ✅ 老手写法:字典映射
def get_discount(member_type):
discounts = {
"A": 0.5, "B": 0.6, "C": 0.7,
"D": 0.8, "E": 0.9, "F": 0.95,
"G": 0.98, "H": 0.99, "I": 1.0
}
return discounts.get(member_type, 1.0)
新手:25 行,9 个分支,加一个等级要改 9 个地方
老手:8 行,一个字典,加一个等级只要加一行
代码少 68%,省下的时间可以摸条鱼
就像餐厅菜单:
> - 新手:服务员背下来所有菜的价格
> - 老手:直接查菜单(字典)
>
> 菜单就是字典:菜名→价格
⚠️ 3 个 if 坑,90% 的人都踩过
坑点 1:嵌套超过 3 层 ❌
错误认知:嵌套越多,考虑越周全。实际情况:嵌套超过 3 层,人脑就跟不上了。嵌套层数 vs 可读性 vs 下班时间:| 5 层+ | 🔴 极差 | 2 小时+ | 22:00+ |
嵌套层数 可读性 维护时间 下班时间 1-2 层 ✅ 好 5 分钟 18:00 3 层 ⚠️ 还行 30 分钟 18:30 4-5 层 ❌ 差 1 小时 19:00
嵌套 3 层:维护 5 分钟,每天加班 0 分钟
嵌套 10 层:维护 2 小时,每天加班 120 分钟
一个月下来:多加班 40 小时 = 多上班 5 天
坑点 2:条件写反 🔥
错误做法:if age18 or age < 60
真相:这个条件几乎总是 True!
# ❌ 错误:逻辑不对
if age > 18 or age < 60: # 19、50、100 岁?True。
print("成年人")
# ✅ 正确:用 and
if age >= 18 and age < 60:
print("成年人")
有个公司用错条件,导致 90% 的用户都能领优惠券。
> 损失:¥50 万。
坑点 3:= 和 == 混淆 💸
错误做法:if age = 18真相:这是赋值,不是比较!
# ❌ 错误
if age = 18: # SyntaxError
print("18 岁")
# ✅ 正确
if age == 18:
print("18 岁")
有个程序员在 C 语言里写错,if (age = 18)
把 age 赋值为 18,条件永远为 True。
> bug 隐藏了 3 个月才发现。
📚 延伸阅读(真有用,不是凑数)
1. [Python 条件控制文档]
(https://docs.python.org/zh-cn/3/tutorial/controlflow.html)- 官方教程
2. [代码整洁之道]
(https://book.douban.com/subject/4199741/) - 第 3 章讲条件判断
3. [重构:改善既有代码的设计]
(https://book.douban.com/subject/4262627/) - 第 10 章讲简化条件逻辑
4. [Python 最佳实践]
(https://github.com/zedr/awesome-python-best-practices) - GitHub 精选
✅ 今日作业(做完真能提升)
作业 1:找出你最丑的 if 语句(10 分钟)
# 翻出你以前写的代码
# 找嵌套层数最多的 if 语句
# 数一下有多少层
评论区告诉我,最多多少层?我帮你优化。
作业 2:用今天的技巧重构(20 分钟)
# 选一个嵌套超过 3 层的函数
# 用提前返回、if-elif-else、字典映射优化
# 对比优化前后的代码行数
优化后能少多少行?评论区晒出来。
作业 3(选做):写个条件判断测试
# 写 5 个测试用例
# 覆盖所有分支
# 确保没有逻辑漏洞
🎉 小结(30 秒看完)
| 知识点 | 关键结论 | 省多少时间 | 相当于 |
|---|---|---|---|
| 提前返回 | 先处理异常,再写主逻辑 | 少 67% 代码 | 每天早走 30 分钟 |
| if-elif-else | 用扁平化代替嵌套 | 少 60% 代码 | 每天早走 20 分钟 |
| 字典映射 | 分支超过 5 个就用字典 | 少 68% 代码 | 每天早走 30 分钟 |
🚀 明天预告(点赞+关注)
第 9 天:Python 循环详解:for 和 while 的正确用法
你会明白:
为什么 90% 的 for 循环可以写成列表推导式?
while 循环的 3 个经典场景
如何用 break 和 continue 优化循环?
避免死循环的 4 个检查点
💬 互动时间
转发给那个 if 语句写 10 层的同事。或者,在评论区聊聊:
👇 你见过最丑的 if 语句有多少层?
我会在评论区挑 3 个最丑的,免费帮你重构。
那个写了 50 层 if 的学员,后来把代码重构了。
> 老板看了说:"这代码像换了个人写的。"
>
> 有时候,少即是多。
💡 写在最后
今天讲的 if 优化技巧,本质是让复杂变简单。
写代码是这样,自我管理也是这样:
复杂的待办 → 简化成清单
混乱的日程 → 整理成计划
难坚持的习惯 → 拆解成打卡
*本文是「AI 大模型入门 180 天」第 8 天内容*
*第 7 天:Python 列表与字典*
*第 9 天:Python 循环详解(明天 10 点更新)*
📢 搭纸 · 你的个人成长助手
想提升效率,却总是三分钟热度?
✅ 个人待办 - 重要事项不遗漏
✅ 个人日程 - 时间安排井井有条
✅ 习惯打卡 - 培养好习惯,告别拖延
✅ 打卡分析 - 数据可视化,见证成长
✅ 线下活动 - 结识同频伙伴,一起进步
点击下方,立即开始自律生活
搭纸 · 个人成长助手
用搭纸,让自律变得简单,让成长看得见。
喜欢这篇文章?欢迎分享到朋友圈




