Python分支语句嵌套
困难2分支嵌套:像俄罗斯套娃一样,一层套一层
你有没有玩过俄罗斯套娃?打开一个大娃娃,里面还藏着一个小娃娃,再打开小娃娃,里面还有一个更小的……在Python编程里,有一种叫“分支嵌套”的写法,就跟套娃很像:在一个分支语句(比如 if、if-else 或 match-case)的代码块里,再写另一个分支语句。这样就能先判断一个条件,条件成立后再判断另一个条件,一层一层地做决定。
比如,你想判断一个人能不能开车:先看他是不是成年人(≥18岁),如果成年了,再看他有没有驾照。这种“先判断大条件,再判断小条件”的逻辑,用分支嵌套写起来特别清楚。
什么是分支嵌套?
简单说,就是在 if 或 else 的“身体”里,再放一个完整的 if-else。Python 用缩进来区分哪段代码属于哪个分支,嵌套的层次越多,缩进就越多(通常一个缩进是4个空格)。
看一个最经典的例子:检查成年人是否允许开车
age = 20 # 年龄
has_license = True # 是否有驾照
if age >= 18: # 外层if:判断是否成年
print("你是成年人")
if has_license: # 内层if:判断是否有驾照
print("你可以开车")
else:
print("你不能开车,因为没有驾照")
else: # 外层else:未成年人
print("未成年人不能开车")
运行这段代码,会输出:
你是成年人
你可以开车
如果 has_license = False,输出就是:
你是成年人
你不能开车,因为没有驾照
注意:内层的 if-else 缩进了8个空格(两层),这样Python才能知道它属于外层 if 里面的代码块。
为什么要用嵌套?——生活中的例子
你每天穿衣服前,大脑就在做类似的嵌套判断:
例1:今天出门穿什么?
- 先判断“天气是否下雨”:
- 如果下雨,再判断“气温是否低于15度”:
- 低于15度 → 穿厚外套 + 雨伞
- 不低于15度 → 穿薄外套 + 雨伞
- 如果不下雨,再判断“气温是否高于30度”:
- 高于30度 → 穿短袖
- 不高于30度 → 穿长袖
- 如果下雨,再判断“气温是否低于15度”:
写成代码就是:
is_rainy = True # 是否下雨
temperature = 20 # 温度(摄氏度)
if is_rainy: # 外层:下雨了
print("带伞出门")
if temperature < 15: # 内层:温度低于15度?
print("穿厚外套")
else:
print("穿薄外套")
else: # 外层:没下雨
if temperature > 30: # 内层:温度高于30度?
print("穿短袖")
else:
print("穿长袖")
例2:考试后决定奖励 老师要发奖励:总分大于90分,再根据平时表现决定奖励大小。
score = 95 # 考试成绩
good_behavior = True # 平时表现是否优秀
if score > 90: # 外层:总分超过90
print("你考得很好!")
if good_behavior: # 内层:平时表现优秀吗?
print("奖励你一个游戏机")
else:
print("奖励你一个笔记本")
else:
print("继续努力,下次争取考高分")
嵌套的好处是:一个决定必须依赖前一个决定,就像排队买东西——先排到队伍(外层条件满足),才能看自己钱包里够不够钱(内层条件)。
多层嵌套:套娃可以套很多层
嵌套不只有两层,可以有很多层,但一般建议不超过三层,否则代码会像迷宫一样难懂。来看一个三层嵌套的例子:判断一个数字属于什么类别。
num = 15 # 要判断的数字
if num > 0: # 第一层:正数?
print("正数")
if num % 2 == 0: # 第二层:偶数?
print("偶数")
else:
print("奇数")
if num > 10: # 第二层:大于10?
print("大于10")
else:
print("非正数")
当 num=15 时,输出:
正数
奇数
大于10
注意:第二层里面又可以再写 if(比如判断是否大于10),但要注意缩进不能乱。如果你觉得三层以上很乱,可以用 逻辑运算符 and、or 把多个条件合并,这样就不需要嵌套了。比如上面的例子可以写成:
if num > 0 and num % 2 == 0:
print("正偶数")
但有时候嵌套更符合“先判断大条件,再判断小条件”的思维顺序。
嵌套还可以用 match-case(Python 3.10+)
除了 if,match-case 也可以嵌套。比如:
day = "周五" # 今天是周几
weather = "晴" # 天气
match day: # 外层:匹配星期
case "周六" | "周日": # 如果是周末
print("今天休息")
match weather: # 内层:匹配天气
case "晴":
print("去公园玩")
case "雨":
print("在家看电影")
case "周五": # 如果是周五
print("明天就周末了")
case _: # 其他工作日
print("上学去")
注意:内层的 match-case 也要缩进正确。
⚠️ 新手最容易犯的错误
-
缩进错误:Python靠缩进识别代码块。如果内层
if少缩进或多缩进,程序会报错或逻辑出错。- 正确:内层
if比外层if多缩进4个空格。 - 错误示例:
if age >= 18: print("成年") if has_license: # 这行少缩进了!变成了外层的一个新if,不是嵌套 print("有驾照")
- 正确:内层
-
忘记写
else:嵌套时你可能只写了if,忘了处理“不满足”的情况。比如:if score > 90: if good_behavior: print("大奖") # 这里没有else,如果good_behavior为False,什么也不输出,可能不符合预期 -
逻辑颠倒:把内外条件写反了。比如想先判断“有驾照”,再判断“是否成年”,但代码写成了先判断成年再判断驾照,结果未成年人连驾照都没机会判断。
-
嵌套层次太深:三层以上读起来很费劲,容易在缩进时数错空格。遇到这种情况,建议用函数或逻辑运算符简化。
完整可运行示例:根据成绩和出勤决定周末安排
小明妈妈规定:如果期中考试分数超过85分,并且本学期出勤率超过90%,就可以去游乐场;如果分数超过85分但出勤率不够,可以去看电影;否则留在家里写作业。
用嵌套写:
score = 88 # 考试成绩
attendance_rate = 0.95 # 出勤率(0到1之间)
if score > 85: # 外层:分数超过85
print("你的成绩达到了标准")
if attendance_rate > 0.9: # 内层:出勤率超过90%
print("奖励:去游乐场玩一天!")
else:
print("奖励:看一场电影")
else: # 外层不满足
print("分数不够,不能出去玩")
if attendance_rate > 0.9: # 内层:虽然分数不够,但出勤好可以鼓励
print("但出勤很好,允许周末多玩半小时游戏")
else:
print("周末在家写作业")
运行结果(score=88, attendance=0.95):
你的成绩达到了标准
奖励:去游乐场玩一天!
相关知识点指引
- 基础分支:如果你还不熟悉
if-else和match-case,先去看看《Python里的if-else:让程序会做选择题》和《match-case:像选择题一样匹配值》这两篇文章。 - 逻辑运算符:用
and、or、not可以把多个条件合并,有时候能避免深层嵌套。比如上面例子可以写成:if score>85 and attendance_rate>0.9: ...。 - 循环嵌套:除了分支嵌套,循环(
for、while)也可以嵌套。学会了分支嵌套,再学循环嵌套会更容易理解“里面再套一层”的结构。
分支嵌套就像给你的程序加上了“多层次思考”的能力,让你能写出更聪明的代码。记住:一层一层来,缩进别马虎;超过三层就考虑简化,别把自己绕晕了。快去试试吧!
例题精讲
以下Python代码运行后,输出结果是? x = 3 if x > 0: if x > 5: print("大于5") else: print("不大于5") else: print("非正数")
在Python中,关于if...elif...else嵌套,下列说法正确的是?
在Python中,嵌套if语句中的else总是和它最近的未配对的if匹配。
在使用嵌套if语句时,内层if的代码块必须比外层if多一个缩进层级。
请补全以下代码,根据成绩score(整数)输出等级:90及以上优秀,80-89良好,60-79及格,60以下不及格。要求使用嵌套if。
score = 85
if score >= 60:
if score >= 90:
grade = "优秀"
___ score >= 80:
grade = "良好"
else:
grade = "及格"
else:
grade = "不及格"
print(grade)