当前位置: 首页 > news >正文

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 > bx == 5)、逻辑运算(如a > 0 and b < 10)或返回布尔值的表达式,结果为True(成立)或False(不成立)。
  • 代码块:由1行或多行代码组成,必须缩进(通常是4个空格),表示这些代码是if语句的一部分。
  • 冒号::用于标记条件表达式的结束,必须放在条件表达式后面。

2. 执行流程

  1. 计算条件表达式的值(True或False)。
  2. 如果值为True,执行缩进的代码块。
  3. 如果值为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. 执行流程

  1. 计算条件表达式的值。
  2. 如果为True,执行代码块1,跳过代码块2。
  3. 如果为False,执行代码块2,跳过代码块1。
  4. 无论哪种情况,最终都会执行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(条件12不成立,条件3成立时执行)
...
else:代码块n(所有条件都不成立时执行)
  • elif是"else if"的缩写,可以有1个或多个。
  • else是可选的,用于处理所有条件都不成立的情况。
  • 只要有一个条件成立,就执行对应的代码块,然后跳过后续所有条件判断。

2. 执行流程

  1. 先判断条件1:如果成立,执行代码块1,整个多分支语句结束。
  2. 如果条件1不成立,判断条件2:如果成立,执行代码块2,语句结束。
  3. 依次类推,直到某个条件成立并执行对应的代码块。
  4. 如果所有条件都不成立,且有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. 提示用户输入权限等级(1-3)。
  2. 根据等级判断权限:
    • 等级1 → “管理员:拥有所有权限(创建/删除用户、修改系统设置)”
    • 等级2 → “编辑:拥有内容管理权限(发布/编辑文章)”
    • 等级3 → “普通用户:拥有浏览权限(查看内容)”
  3. 如果输入的等级不在1-3范围内,提示"无效的权限等级,请输入1-3之间的数字"。

实现步骤

  1. 使用input()函数获取用户输入的等级(字符串类型)。
  2. 使用int()将输入转换为整数(方便比较)。
  3. 用多分支if-elif-else语句判断等级,输出对应权限。
  4. 处理可能的输入错误(如输入非数字时的异常,这里简化处理,假设用户输入数字)。

代码实现

代码解析

  1. 输入处理:使用try-except捕获非数字输入的错误(这是单分支思想的扩展:如果出现异常,执行提示)。
  2. 多分支判断:通过if-elif-elif-else覆盖所有可能的情况:
    • level == 1:管理员权限
    • level == 2:编辑权限
    • level == 3:普通用户权限
    • 其他数字:else处理无效等级
  3. 输出结果:根据不同等级打印对应的权限描述,逻辑清晰。

运行测试

  • 输入"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: ...三种及以上的情况判断

实践建议

  1. 多写示例:用if语句实现简单功能,如判断一个数是否为质数、根据日期判断星期几等。
  2. 注意缩进:养成用4个空格缩进的习惯,避免混合空格和Tab。
  3. 条件顺序:写多分支时,先判断范围小的条件,再判断范围大的(如先判断score >= 90,再判断score >= 80)。
  4. 考虑异常:对用户输入等不确定情况,用elsetry-except处理异常,让程序更健壮。

通过不断练习,你会逐渐掌握if语句的精髓,让代码能够灵活应对各种复杂场景。下一篇文章,我们将学习循环语句,让程序能够重复执行特定操作,进一步提升编程能力。


文章转载自:

http://58Sm5O3c.kxbry.cn
http://a2SwiNF7.kxbry.cn
http://PBYAJFxy.kxbry.cn
http://0zbkYQus.kxbry.cn
http://5XZA2RNU.kxbry.cn
http://bFygTT48.kxbry.cn
http://Zp101Krj.kxbry.cn
http://mg1dZjbm.kxbry.cn
http://PGnHb1DQ.kxbry.cn
http://uhLImvSz.kxbry.cn
http://a3oVFyHu.kxbry.cn
http://3LalNg9d.kxbry.cn
http://ztw5WLd6.kxbry.cn
http://a5hPEy83.kxbry.cn
http://vNU4b2Fs.kxbry.cn
http://m3wiFkxB.kxbry.cn
http://K0ObxQhi.kxbry.cn
http://W3pAIrtL.kxbry.cn
http://bql9tW1V.kxbry.cn
http://zGytgBWc.kxbry.cn
http://s9J6lDMA.kxbry.cn
http://3luuFXBa.kxbry.cn
http://fwjECd6v.kxbry.cn
http://5wleO7zV.kxbry.cn
http://ERYN3DLa.kxbry.cn
http://oMujvuIi.kxbry.cn
http://IAIFDPw2.kxbry.cn
http://quy9wG4T.kxbry.cn
http://ZcJpq7yZ.kxbry.cn
http://i6nFoklC.kxbry.cn
http://www.dtcms.com/a/378835.html

相关文章:

  • 学习笔记:JavaScript(4)——DOM节点
  • 软考中级习题与解答——第四章_软件工程(3)
  • 消息队列-kafka完结
  • SKywalking Agent配置+Oracle监控插件安装指南
  • Skywalking告警配置+简易邮件告警应用配置(保姆级)
  • 【matlab】YALMIP、GLPK安装资源及安装方法
  • modbus学习
  • 创建GLFW窗口,开启OpenGL之路
  • (网络原理)核心知识回顾 网络核心原理 get和post的理解 解析http 加密+请求和响应的一些关键字 Cookie和session 对密钥的理解
  • 如何提升研发文档的检索体验与效率
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(三)
  • R-Zero:大语言模型的自进化革命,突破数据依赖迈向自主智能
  • RL【8】:Value Function Approximation
  • StringJoiner
  • 【知识堂】制造业与物流数字化全景图:系统缩写大全与专业名词速查手册
  • 项目1——单片机程序审查,控制系统安全漏洞分析和改进建议
  • 中断上半部与中断下半部
  • 吱吱企业即时通讯以安全为基,重塑安全办公新体验
  • ctfshow_web13-----------文件上传.user.ini
  • 112. 路径总和
  • 四,基础开发工具(下)
  • Docker+jenkinsPipeline 运行实现python自动化测试
  • Android图案解锁绘制
  • 分布式事务性能优化:从故障现场到方案落地的实战手记(一)
  • JVM第一部分
  • websocket和socket io的区别
  • codebuddy ai cli安装教程
  • MySQL5.7.44保姆级安装教程
  • 正则表达式基础
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘pandas-profiling’问题