这一篇非常关键,因为真实程序里,很多时候不是只有“满足”或者“不满足”两种情况,而是会出现很多种不同分支。
上一篇你已经学会了最基础的 if。
也就是:
如果条件成立,就执行某段代码。
比如:
score = int(input('请输入成绩:'))if score >= 60: print('成绩及格')
这类判断很好理解。 可你很快就会发现,真实场景往往不只一种结果。
比如成绩判断,不只是及格和不及格。 还可能有:
90 分以上,优秀 80 分以上,良好 60 分以上,及格 60 分以下,不及格
再比如年龄判断,也不只是成年和未成年。 还可能有:
6 岁以下,幼儿 6 到 17 岁,未成年 18 到 59 岁,成年人 60 岁及以上,老年人
这时候,单纯一个 if 就不够用了。 因为你要面对的是多个条件、多个分支。
这时就要轮到今天的主角上场了:
if...elif...else
这一篇,我们就把多条件判断彻底讲清楚。
一、为什么要学 if...elif...else
先想一个特别现实的问题。
假设你要写一个程序,根据分数给出评价。
如果你只会最基础的 if,那你可能会想这样写:
score = int(input('请输入成绩:'))if score >= 90: print('优秀')if score >= 80: print('良好')if score >= 60: print('及格')
看起来好像没问题。 但如果用户输入 95,会发生什么。
程序会输出:
优秀良好及格
这显然不太对。 因为 95 分应该只属于“优秀”,不应该后面又冒出“良好”和“及格”。
这就说明,多个条件之间,有时候不是彼此独立的。 而是“只要命中一个,就不要再继续往下判断”。
这就是 if...elif...else 的用武之地。
二、if...elif...else 到底是什么
你可以先把它理解成一句很朴素的话:
如果这个条件成立,就做这件事。 否则如果另一个条件成立,就做另一件事。 如果前面都不成立,就做最后那件事。
它的基本结构长这样:
if 条件1: 条件1成立时执行的代码elif 条件2: 条件2成立时执行的代码else: 前面条件都不成立时执行的代码
这里有三个关键词:
if表示第一个判断
elif表示“否则如果”
else表示“否则”
你现在先不用急着背。 先把它翻译成人话:
如果…… 否则如果…… 否则……
一旦翻成这个思路,逻辑就会顺很多。
三、先看一个最基础的完整例子
还是用分数判断最直观。
score = int(input('请输入成绩:'))if score >= 90: print('优秀')elif score >= 60: print('及格')else: print('不及格')
这段代码的意思是:
如果分数大于等于 90,就输出优秀 否则如果分数大于等于 60,就输出及格 否则就输出不及格
你可以自己试三组输入:
95 75 40
对应结果分别会是:
优秀及格不及格
这个例子特别值得你反复体会。 因为从这一刻开始,程序已经不只是会判断一个条件了, 它会在多种可能中选一种最合适的结果。
四、elif 到底是什么意思
很多新手第一次看到 elif 会觉得有点怪。
其实你完全可以把它拆开理解:
else if
只不过 Python 里把它合成了一个单词:
elif
它的意思就是:
如果前面的 if 不成立,那我再来判断这个条件。
所以它不是和 if 平行同时判断的。 它有一个重要前提:
前面的条件没命中,才轮到它。
这一点特别关键。 因为这正是 if...elif...else 和多个独立 if 的最大区别。
五、多个独立 if 和 if...elif...else 有什么本质区别
这个问题一定要讲透。
先看多个独立 if:
score = 95if score >= 90: print('优秀')if score >= 80: print('良好')if score >= 60: print('及格')
这里三个 if 是独立的。 所以只要各自条件成立,就都会执行。
而下面这种:
score = 95if score >= 90: print('优秀')elif score >= 80: print('良好')elif score >= 60: print('及格')else: print('不及格')
它们不是独立的。 它是一整组判断链。
一旦前面有一个条件成立了, 后面的 elif 和 else 就不会再执行。
所以你一定要区分清楚:
多个 if适合彼此独立、可以同时成立的条件
if...elif...else适合多选一、命中一个就停的条件
六、为什么多条件判断通常更适合 if...elif...else
因为很多分类场景,本来就是互斥的。
比如成绩等级:
优秀 良好 及格 不及格
一个分数不可能同时属于这四个等级。 所以最合适的写法,就是 if...elif...else。
再比如年龄分类:
儿童 青少年 成年人 老年人
一个年龄也只会落进其中一个区间。
所以你以后看到这种场景:
一组条件里,最终只应该选一个结果
就要优先想到:
if...elif...else
七、先做一个最典型的成绩等级判断
这个例子你一定要亲手敲。
score = int(input('请输入成绩:'))if score >= 90: print('成绩等级:优秀')elif score >= 80: print('成绩等级:良好')elif score >= 60: print('成绩等级:及格')else: print('成绩等级:不及格')
你可以输入几组数据看看:
95 85 70 40
观察一下结果是不是只会输出一种等级。
这个例子非常重要, 因为它几乎是理解 elif 最经典的入门场景。
八、判断顺序为什么特别重要
这一点非常关键。
比如刚才那个成绩判断,如果你写成这样:
score = int(input('请输入成绩:'))if score >= 60: print('及格')elif score >= 80: print('良好')elif score >= 90: print('优秀')else: print('不及格')
看起来也有 if...elif...else。 但逻辑其实已经错了。
为什么。
因为如果输入 95,程序会先判断:
score >= 60 成立吗
答案是成立。 那程序立刻输出“及格”,然后整组判断结束。 后面的 80、90 再也不会看了。
所以结果就错了。
这说明什么。
说明多条件判断时,顺序特别重要。 一般来说,要把要求更高、范围更小的条件放前面。
也就是:
先判断 90 再判断 80 再判断 60
而不是反过来。
九、一个特别实用的原则:范围大的条件通常放后面
比如成绩判断里:
score >= 90 范围最小score >= 80 范围更大score >= 60 范围更大
所以正确顺序应该是:
if score >= 90:elif score >= 80:elif score >= 60:else:
同样道理,年龄分类也一样。
比如:
60 岁及以上 18 到 59 岁 6 到 17 岁 6 岁以下
你通常要先判断更明确、更高的边界, 这样逻辑才不会互相覆盖。
这个原则你后面会越用越多。
十、else 到底有什么用
else 的作用就是:
当前面所有条件都不成立时,执行最后这个兜底分支。
你可以把它理解成:
前面都不是,那就走这里。
比如:
score = int(input('请输入成绩:'))if score >= 60: print('及格')else: print('不及格')
这里 else 特别自然。 如果及格条件成立,就输出及格。 否则,就输出不及格。
在多条件里也是一样。
if score >= 90: print('优秀')elif score >= 80: print('良好')elif score >= 60: print('及格')else: print('不及格')
这里 else 就表示:
前面优秀、良好、及格都不满足, 那就只能是不及格了。
所以 else 经常像一个“收尾兜底”。
十一、else 不是必须的,但很多时候很有用
你可以只写:
if 条件: ...elif 条件: ...
不一定非要有 else。
比如:
age = int(input('请输入年龄:'))if age >= 18: print('你已经成年')elif age >= 12: print('你是青少年')
这段代码是合法的。
只是如果用户输入 8, 程序就不会输出任何内容。
所以:
else 不是语法必须 但如果你希望“前面都不满足时也有个结果”, 那它就很有价值。
对新手来说,很多分类问题都建议带上 else, 这样程序更完整,也更容易理解。
十二、if...elif...else 是从上往下判断的
这个执行顺序你一定要刻进脑子里。
程序不会一下子把所有条件都同时看完。 它是按顺序一条一条往下看。
比如:
score = 85if score >= 90: print('优秀')elif score >= 80: print('良好')elif score >= 60: print('及格')else: print('不及格')
程序会先看:
第一条,score >= 90 成立吗 不成立,那继续往下
第二条,score >= 80 成立吗 成立,于是输出“良好”,然后停止整组判断
后面的 elif score >= 60 和 else 就都不再看了。
所以你以后读这类代码时, 脑子里一定要有“从上往下,命中即停”的感觉。
十三、自己动手做一个年龄分类练习
这个练习特别适合现在做。
age = int(input('请输入年龄:'))if age >= 60: print('老年人')elif age >= 18: print('成年人')elif age >= 6: print('未成年人')else: print('幼儿')
你可以输入几组数据:
65 25 12 3
看输出分别是什么。
这个例子很有代表性, 因为它不是简单的“是或不是”, 而是真正开始做区间分类了。
十四、字符串判断也可以写成多分支
别以为 if...elif...else 只能配合数字。
字符串也完全可以。
比如根据不同用户名,输出不同欢迎语:
name = input('请输入姓名:')if name == '小明': print('欢迎你,小明')elif name == '小红': print('欢迎你,小红')elif name == '老师': print('老师您好')else: print('欢迎你,陌生朋友')
这个程序就很典型。
它在多个可能值里, 根据输入内容选择一个最合适的分支。
这说明:
if...elif...else 不是只看数字大小 它本质上是在处理“多个可能中的选择问题”
十五、if...elif...else 和布尔变量也可以结合起来
比如前面你学过把判断结果先保存成变量。
现在也可以这么写:
score = int(input('请输入成绩:'))is_excellent = score >= 90is_good = score >= 80is_pass = score >= 60if is_excellent: print('优秀')elif is_good: print('良好')elif is_pass: print('及格')else: print('不及格')
虽然这个例子里直接写条件可能更短, 但这种先拆成布尔变量的写法, 在条件变复杂时会非常清楚。
对新手来说,这种写法特别适合训练“把条件想清楚”的能力。
十六、不要一看到 elif 就害怕,它本质上只是“否则如果”
这个地方我想单独强调一下。
有些人第一次学到 elif, 会下意识觉得它比 if 难很多。
其实不是。
你完全可以把下面这段:
if 条件1: ...elif 条件2: ...else: ...
直接翻译成:
如果条件1成立,就…… 否则如果条件2成立,就…… 否则,就……
一旦这么翻译,逻辑其实特别自然。 它并不复杂,只是多了几条可能路线而已。
十七、先别急着写太复杂,最重要的是先把“多选一”感觉练出来
现阶段你最该练的,不是超复杂业务判断。 而是这种感觉:
这几个条件中,最终只应该走一条
比如:
根据分数选一个等级 根据年龄选一个阶段 根据身份选一种欢迎语 根据库存状态选一种提示
这些都属于最典型的“多选一”。
而 if...elif...else 正是专门干这个的。
你只要先把这种感觉练稳, 后面写复杂程序时,就不会乱得太厉害。
十八、实操,做一个天气提示小程序
这个例子简单但很实用。
weather = input('请输入天气:')if weather == '晴天': print('适合出门')elif weather == '下雨': print('记得带伞')elif weather == '下雪': print('注意保暖')else: print('祝你今天一切顺利')
这个程序特别适合用来体会:
字符串输入 多分支判断 兜底 else
你可以自己多输入几种天气试试。 看看程序是不是总能选出一条合适的输出。
十九、实操,做一个会员折扣提示程序
这个例子也很像真实业务。
level = input('请输入会员等级:')if level == '黄金': print('享受 8 折优惠')elif level == '白银': print('享受 9 折优惠')elif level == '普通': print('享受 95 折优惠')else: print('当前无会员折扣')
你可以输入:
黄金 白银 普通 游客
观察结果。
这个例子特别能帮助你理解: 程序是如何在多个可能中,匹配一个对应结果的。
二十、if...elif...else 最容易犯的几个错误
第一个错误,条件顺序写反了。
比如先写 score >= 60,后写 score >= 90。 这样高分就会先被低门槛条件截走。
第二个错误,漏掉冒号。
错误写法:
if score >= 90 print('优秀')
正确写法:
if score >= 90: print('优秀')
第三个错误,缩进不一致。
比如 if 下面缩了 4 个空格,elif 下面缩得乱七八糟, 很容易报错。
第四个错误,把 elif 当成独立 if 使用思路去理解。
一定要记住,elif 的前提是前面的条件没命中。 它不是平行同时执行的。
第五个错误,觉得 else 一定要有。
不是。 它很常用,但不是强制。
二十一、今天一定要亲手完成的 3 个练习
第一个,成绩等级判断。
score = int(input('请输入成绩:'))if score >= 90: print('优秀')elif score >= 80: print('良好')elif score >= 60: print('及格')else: print('不及格')
第二个,年龄分类判断。
age = int(input('请输入年龄:'))if age >= 60: print('老年人')elif age >= 18: print('成年人')elif age >= 6: print('未成年人')else: print('幼儿')
第三个,字符串多分支判断。
role = input('请输入你的身份:')if role == '学生': print('欢迎进入学生系统')elif role == '老师': print('欢迎进入教师系统')elif role == '管理员': print('欢迎进入后台管理系统')else: print('身份未识别')
这三个练习类型不同, 正好能帮你把数字分类和字符串分类都练到。
二十二、再做一个综合小练习
下面这个例子很适合作为今天的综合练习。
需求:
输入姓名和成绩 根据成绩输出等级评价
代码如下:
name = input('请输入姓名:')score = int(input('请输入成绩:'))if score >= 90: print(f'{name},你的等级是优秀')elif score >= 80: print(f'{name},你的等级是良好')elif score >= 60: print(f'{name},你的等级是及格')else: print(f'{name},你的等级是不及格')
这个小程序特别适合公众号读者自己去改。
比如你可以继续加一个分支:
100 分,满分表现
if score == 100: print(f'{name},你考了满分')elif score >= 90: print(f'{name},你的等级是优秀')...
这类改造练习特别有价值, 因为你开始不只是照抄,而是在真正操控判断逻辑。
二十三、写在最后
从 if 到 if...elif...else, 看起来只是多学了两个单词。
但程序能力其实往前迈了一大步。
因为最基础的 if 只是让程序学会:
满足条件,就执行
而 if...elif...else 则让程序学会:
在多个可能里,选出最合适的那个
这就已经非常接近真实程序逻辑了。
现实世界里的很多规则,本来就不是“是或不是”那么简单。 往往是很多种情况并存。 而程序能不能写得像样, 很大程度上就取决于你能不能把这些情况整理清楚,再用多分支判断表达出来。
你现在学的,不只是一个语法升级。 你是在学程序如何做更像样的选择。
本文小结
if...elif...else 适合处理多条件、多分支、只选一个结果的场景。elif 的意思是“否则如果”。else 表示前面条件都不成立时执行的兜底分支。 这组判断是从上往下执行的,一旦命中一个分支,后面就不会再判断。 多条件判断时,条件顺序特别重要,通常要把范围更小、要求更高的条件放前面。 学习这一部分最关键的,不只是记格式,而是形成“多选一”的判断思维。
下篇预告
第 23 篇,我们继续把判断能力往前推进。
嵌套判断:复杂逻辑是怎么一层层实现的
到那一篇,你会看到,当一个判断里面还需要继续判断时,程序是怎么一层一层把逻辑搭出来的。