Python快速入门专业版(二十一):if语句基础:单分支、双分支与多分支(判断用户权限案例)
目录
- 一、if语句的核心作用:让程序学会"做判断"
- 二、单分支if语句:满足条件才执行
- 1. 语法结构
- 2. 执行流程
- 3. 代码示例
- 示例1:判断年龄是否成年
- 示例2:判断列表是否为空
- 4. 常见错误:缩进问题
- 三、双分支if-else语句:两种情况二选一
- 1. 语法结构
- 2. 执行流程
- 3. 代码示例
- 示例1:判断奇偶数
- 示例2:验证密码
- 4. 应用场景
- 四、多分支if-elif-else语句:多种情况选其一
- 1. 语法结构
- 2. 执行流程
- 3. 代码示例
- 示例1:成绩评级
- 示例2:判断季节
- 4. 注意事项
- 五、代码缩进规则:Python的"语法纪律"
- 1. 基本规则
- 2. 常见错误与避免
- 六、综合案例:用户权限判断系统
- 案例需求
- 实现步骤
- 代码实现
- 代码解析
- 运行测试
- 七、if语句的嵌套:复杂逻辑的处理
- 语法示例
- 应用示例:嵌套判断管理员类型
- 注意事项
- 八、总结与实践建议
在编程世界中,我们经常需要根据不同的条件执行不同的操作。比如登录系统时验证密码是否正确、根据用户等级展示不同功能、判断数值大小并给出提示等。这些"根据条件做决定"的逻辑,在Python中主要通过
if
语句实现。
if
语句是控制程序流程的基础工具,掌握它能让你的代码拥有"判断能力"。本文将从基础语法入手,详细讲解单分支、双分支和多分支的
if
语句,并通过"用户权限判断"案例帮助你灵活应用。
一、if语句的核心作用:让程序学会"做判断"
想象你在日常生活中做决策的过程:“如果下雨,就带伞;如果不下雨,就不带伞”。这种"根据条件执行不同操作"的逻辑,在编程中被称为"分支结构",而if
语句正是实现分支结构的核心语法。
在Python中,if
语句的基本思想是:先判断一个条件是否成立(结果为True或False),如果成立就执行特定的代码块,否则不执行(或执行其他代码块)。
例如,我们想让程序判断一个数字是否为正数,可以这样写:
num = 5
if num > 0:print("这是一个正数")
这里,num > 0
是一个条件(结果为True),所以程序会执行print
语句,输出"这是一个正数"。如果num
是-3,条件num > 0
为False,print
语句就不会执行。
理解if
语句的关键在于两点:条件表达式(判断"是/否"的依据)和代码块(条件成立时执行的操作)。
二、单分支if语句:满足条件才执行
单分支是if
语句最基础的形式,用于实现"如果条件成立,就执行某操作"的逻辑,不考虑条件不成立的情况。
1. 语法结构
if 条件表达式:代码块(条件成立时执行)
- 条件表达式:可以是比较运算(如
a > b
、x == 5
)、逻辑运算(如a > 0 and b < 10
)或返回布尔值的表达式,结果为True
(成立)或False
(不成立)。 - 代码块:由1行或多行代码组成,必须缩进(通常是4个空格),表示这些代码是
if
语句的一部分。 - 冒号
:
:用于标记条件表达式的结束,必须放在条件表达式后面。
2. 执行流程
- 计算条件表达式的值(True或False)。
- 如果值为True,执行缩进的代码块。
- 如果值为False,跳过代码块,执行
if
语句后面的其他代码。
3. 代码示例
示例1:判断年龄是否成年
age = 18
# 单分支if语句:如果年龄大于等于18,打印"已成年"
if age >= 18:print("已成年,可独立办理业务")
print("程序结束")
输出结果:
已成年,可独立办理业务
程序结束
解释:条件age >= 18
为True,所以执行print("已成年...")
,然后执行if
语句外的print("程序结束")
。
示例2:判断列表是否为空
fruits = ["苹果", "香蕉"]
# 单分支if语句:如果列表不为空,打印列表长度
if len(fruits) > 0:print(f"列表中有{len(fruits)}种水果")
输出结果:
列表中有2种水果
如果fruits
是空列表[]
,则len(fruits) > 0
为False,print
语句不会执行,程序无输出。
4. 常见错误:缩进问题
Python通过缩进来区分代码块,这是它与其他语言(如Java、C++用大括号{}
)的重要区别。单分支if
语句的代码块必须缩进,否则会报错。
错误示例:
num = 3
if num > 0:
print("正数") # 错误:代码块没有缩进
运行后会提示IndentationError: expected an indented block
(缩进错误:需要缩进块)。
正确做法:使用4个空格缩进(推荐)或1个Tab键,但绝对不要混合使用空格和Tab,否则可能导致逻辑错误或报错。
三、双分支if-else语句:两种情况二选一
单分支只能处理"条件成立"的情况,而实际场景中往往需要"二选一":如果条件成立执行A操作,否则执行B操作。这时就需要双分支的if-else
语句。
1. 语法结构
if 条件表达式:代码块1(条件成立时执行)
else:代码块2(条件不成立时执行)
else
后面不需要条件表达式,它自动处理"条件不成立"的情况。- 代码块1和代码块2都需要缩进,且缩进量必须一致(通常4个空格)。
2. 执行流程
- 计算条件表达式的值。
- 如果为True,执行代码块1,跳过代码块2。
- 如果为False,执行代码块2,跳过代码块1。
- 无论哪种情况,最终都会执行
if-else
语句之后的代码。
3. 代码示例
示例1:判断奇偶数
num = 7
# 双分支if-else:判断奇数还是偶数
if num % 2 == 1:print(f"{num}是奇数")
else:print(f"{num}是偶数")
输出结果:
7是奇数
如果num
是8,条件num % 2 == 1
为False,会执行else
后的代码,输出"8是偶数"。
示例2:验证密码
# 预设正确密码
correct_password = "python123"
# 获取用户输入的密码
user_input = input("请输入密码:")# 双分支判断:密码是否正确
if user_input == correct_password:print("密码正确,登录成功!")
else:print("密码错误,请重新输入!")
运行时如果输入"python123",输出"登录成功";输入其他内容则输出"密码错误"。
4. 应用场景
双分支适合处理非此即彼的逻辑:如判断真假、对错、有无、开关等互斥情况。例如:
- 判断学生是否及格(及格/不及格)
- 判断文件是否存在(存在则读取/不存在则提示)
- 判断用户是否登录(已登录则展示内容/未登录则跳转登录页)
四、多分支if-elif-else语句:多种情况选其一
当需要处理的条件超过2个时,单分支和双分支就不够用了。例如:根据考试分数评级(优秀、良好、及格、不及格)、根据用户等级分配权限(管理员、编辑、普通用户)等。这时需要用多分支的if-elif-else
语句。
1. 语法结构
if 条件1:代码块1(条件1成立时执行)
elif 条件2:代码块2(条件1不成立,条件2成立时执行)
elif 条件3:代码块3(条件1、2不成立,条件3成立时执行)
...
else:代码块n(所有条件都不成立时执行)
elif
是"else if"的缩写,可以有1个或多个。else
是可选的,用于处理所有条件都不成立的情况。- 只要有一个条件成立,就执行对应的代码块,然后跳过后续所有条件判断。
2. 执行流程
- 先判断条件1:如果成立,执行代码块1,整个多分支语句结束。
- 如果条件1不成立,判断条件2:如果成立,执行代码块2,语句结束。
- 依次类推,直到某个条件成立并执行对应的代码块。
- 如果所有条件都不成立,且有
else
,则执行代码块n;如果没有else
,则什么都不执行。
3. 代码示例
示例1:成绩评级
score = 85
# 多分支判断:根据分数评级
if score >= 90:print("优秀")
elif score >= 80:print("良好")
elif score >= 60:print("及格")
else:print("不及格")
输出结果:
良好
解析:
- 条件1
score >= 90
?85不满足→判断条件2。 - 条件2
score >= 80
?85满足→执行"良好",语句结束(不会再判断后续条件)。
示例2:判断季节
month = 4 # 4月
# 多分支判断:根据月份判断季节
if month in [3, 4, 5]:print("春季")
elif month in [6, 7, 8]:print("夏季")
elif month in [9, 10, 11]:print("秋季")
elif month in [12, 1, 2]:print("冬季")
else:print("无效的月份")
输出结果:
春季
4. 注意事项
-
条件顺序很重要:多分支会按顺序判断条件,前面的条件范围不能包含后面的条件,否则后面的条件永远不会被执行。
错误示例(条件顺序颠倒):
score = 85 if score >= 60: # 85满足此条件,会直接执行"及格"print("及格") elif score >= 80: # 永远不会被判断print("良好")
输出结果错误地显示为"及格",因为85先满足了
score >= 60
,跳过了后面的条件。 -
else
的作用:else
可以省略,但省略后如果所有条件都不成立,程序不会有任何提示。建议根据需求添加else
,处理异常情况(如输入无效值)。
五、代码缩进规则:Python的"语法纪律"
在Python中,缩进不仅是代码格式问题,更是语法的一部分——它决定了代码块的归属(哪部分代码属于if
,哪部分属于else
等)。掌握缩进规则是写对if
语句的前提。
1. 基本规则
- 代码块必须缩进,通常使用4个空格(推荐)或1个Tab键(不推荐,因为不同编辑器对Tab的解析可能不同)。
- 同一代码块的缩进量必须完全一致(例如都是4个空格)。
- 缩进结束处的代码表示退出该代码块,属于外层逻辑。
示例:
num = 10
if num > 5:print("num大于5") # 4个空格缩进,属于if代码块if num < 15:print("num小于15") # 8个空格缩进(嵌套在if内)
print("这行代码不属于任何if块") # 无缩进,在if外
输出结果:
num大于5
num小于15
这行代码不属于任何if块
2. 常见错误与避免
- 混合使用空格和Tab:例如用Tab缩进一行,用4个空格缩进另一行,可能导致
IndentationError
。解决:在编辑器中设置"将Tab转换为空格"(大多数Python编辑器默认开启)。 - 缩进量不一致:同一代码块中,有的行缩进4个空格,有的缩进3个,会报错。解决:使用编辑器的"自动缩进"功能。
- 不必要的缩进:不属于任何分支的代码被缩进,会导致逻辑错误。例如:
错误写法(num = 3 if num > 5:print("大于5") print("结束") # 正确:无缩进,无论条件如何都会执行
print("结束")
被缩进):num = 3 if num > 5:print("大于5")print("结束") # 错误:只有条件成立时才会执行
六、综合案例:用户权限判断系统
下面我们通过一个"用户权限判断"案例,综合应用单分支、双分支和多分支if
语句,实现根据用户输入的权限等级,展示对应权限的功能。
案例需求
- 提示用户输入权限等级(1-3)。
- 根据等级判断权限:
- 等级1 → “管理员:拥有所有权限(创建/删除用户、修改系统设置)”
- 等级2 → “编辑:拥有内容管理权限(发布/编辑文章)”
- 等级3 → “普通用户:拥有浏览权限(查看内容)”
- 如果输入的等级不在1-3范围内,提示"无效的权限等级,请输入1-3之间的数字"。
实现步骤
- 使用
input()
函数获取用户输入的等级(字符串类型)。 - 使用
int()
将输入转换为整数(方便比较)。 - 用多分支
if-elif-else
语句判断等级,输出对应权限。 - 处理可能的输入错误(如输入非数字时的异常,这里简化处理,假设用户输入数字)。
代码实现
代码解析
- 输入处理:使用
try-except
捕获非数字输入的错误(这是单分支思想的扩展:如果出现异常,执行提示)。 - 多分支判断:通过
if-elif-elif-else
覆盖所有可能的情况:level == 1
:管理员权限level == 2
:编辑权限level == 3
:普通用户权限- 其他数字:
else
处理无效等级
- 输出结果:根据不同等级打印对应的权限描述,逻辑清晰。
运行测试
-
输入"1":
=== 用户权限查询 === 请输入权限等级(1-3):1 权限:管理员 拥有所有权限(创建/删除用户、修改系统设置)查询结束
-
输入"2":
=== 用户权限查询 === 请输入权限等级(1-3):2 权限:编辑 拥有内容管理权限(发布/编辑文章)查询结束
-
输入"3":
=== 用户权限查询 === 请输入权限等级(1-3):3 权限:普通用户 拥有浏览权限(查看内容)查询结束
-
输入"4"(无效等级):
=== 用户权限查询 === 请输入权限等级(1-3):4 无效的权限等级,请输入1-3之间的数字查询结束
-
输入"abc"(非数字):
=== 用户权限查询 === 请输入权限等级(1-3):abc 输入错误!请输入数字1-3。查询结束
七、if语句的嵌套:复杂逻辑的处理
在实际开发中,有时需要在一个分支中再嵌套另一个分支,这就是if
语句的嵌套。例如:“如果用户是管理员,再判断是否为超级管理员,执行不同操作”。
语法示例
if 外层条件:外层代码块if 内层条件:内层代码块1else:内层代码块2
else:外层else代码块
应用示例:嵌套判断管理员类型
# 嵌套if示例:判断管理员类型
level = 1
is_super = True # 是否为超级管理员if level == 1:print("您是管理员")# 嵌套的if-else:判断是否为超级管理员if is_super:print("且是超级管理员,拥有最高权限")else:print("但不是超级管理员,权限有限制")
else:print("您不是管理员")
输出结果:
您是管理员
且是超级管理员,拥有最高权限
注意事项
- 嵌套层数不宜过多(建议不超过3层),否则代码可读性会变差。
- 缩进要严格:内层
if
的代码块需要比外层多缩进4个空格。
八、总结与实践建议
if
语句是Python中实现分支逻辑的基础,掌握它能让程序从"顺序执行"升级为"智能判断"。本文主要知识点:
分支类型 | 语法结构 | 适用场景 |
---|---|---|
单分支 | if 条件: 代码块 | 只需处理条件成立的情况 |
双分支 | if 条件: 代码块1 else: 代码块2 | 二选一的互斥情况 |
多分支 | if 条件1: ... elif 条件2: ... else: ... | 三种及以上的情况判断 |
实践建议:
- 多写示例:用
if
语句实现简单功能,如判断一个数是否为质数、根据日期判断星期几等。 - 注意缩进:养成用4个空格缩进的习惯,避免混合空格和Tab。
- 条件顺序:写多分支时,先判断范围小的条件,再判断范围大的(如先判断
score >= 90
,再判断score >= 80
)。 - 考虑异常:对用户输入等不确定情况,用
else
或try-except
处理异常,让程序更健壮。
通过不断练习,你会逐渐掌握if
语句的精髓,让代码能够灵活应对各种复杂场景。下一篇文章,我们将学习循环语句,让程序能够重复执行特定操作,进一步提升编程能力。