【Python数据结构与判断1/7】复杂的多向选择

目录

导入

举个栗子

代码优化

elif

栗子

执行顺序

情况一

情况二

情况三

if-elif-else特性

三种判断语句小结

if

if-else

if-elif-else

嵌套语句

if嵌套

栗子

执行顺序

相互嵌套

Tips

Debug

总结


导入

        在前面,我们学习了单向选择的if语句和多项选择的if-else语句。但是,在生活中N选1的情况更为多见。

        在Python中,我们也可以添加更多的选择,来实现从“二选一”到“多选一”的进阶,一起来看看吧~

举个栗子

        如图所示,为了实现完整的判断,我们使用了三个 if,来保证所有的得分对比情况(大于、等于、小于)都会有对应的输出。

代码优化

        但是对于这种3个或以上的条件,无法使用一个if-else 结构来优化代码。这时可以使用Python判断语句中的第三个关键字 elif(else if的缩写)。

elif

        if 后的语句是当 if 判断条件成立时,执行的操作。
        elif 后的语句是当 if 判断不成立时,再判断一次,如果成立,执行的操作。
        else 后的语句是当以上所有判断条件都不成立时,执行的操作。

栗子

        本例第3、4行代码判断了如果变量 day 等于1,就输出"元气满满地工作"。第5、6行代码判断了如果变量 day 大于等于2并且小于等于5,就输出"继续搬砖吧"。第7、8行代码判断了如果之前的条件都不满足,就输出"世界这么大,出去走走吧"。

day = 3if day == 1:print("元气满满地工作")
elif (day >= 2) and (day <= 5):print("继续搬砖吧")
else: print("世界这么大,出去走走吧")

if判断

        if后面的布尔表达式,在这里不成立。那么if后面的代码块,也就是第4行代码,不会被执行。

elif

        是一个关键字,使else和if的缩写。如果之前的判断条件不成立,那么就重新做一次判断,执行elif后面的代码。

布尔表达式

        两次比较运算,如果变量 day 大于等于2,如果变量 day 小于等于5。本例中结果都为 True。一次逻辑运算 and(“与”运算)。本例中参与运算的分别是 True 和 True ,运算结果为 True 。括号,用来框定代码运算的顺序,表明先进行比较运算,再进行逻辑“与”运算。

冒号

        就像 if 和 else 一样,elif 语句的最后也需要一个冒号。在 elif 之后使用冒号,表示后续缩进的代码块在判断条件成立的时候会被执行。

缩进

        缩进生成 elif 内的代码块,这里我们还是空四格。

else

        一个关键字 else,如果前面的 if 和 elif 的判断条件都不成立,就执行 else 后面缩进的代码块。

执行顺序

情况一

        我们把 if-elif-else 判断的执行顺序,梳理成流程图后,再来整理一下程序运行流程。第一种情况,程序运行到 if 判断时,如果条件为真,执行 if 的代码块。

        完成后,运行 if-elif-else 后面的代码。

情况二

        第二种情况,程序运行到 if 判断时,如果条件为假,程序就直接跳开 if 判断的执行部分,再次运行到 elif 的判断,如果条件为真,执行 elif 的代码块。

        完成后,运行 if-elif-else 后面的代码。

情况三

        第三种情况,程序运行到 elif 判断时,如果条件为假,程序就直接跳开 elif 判断的执行部分,运行 else 的代码块。
        完成后,运行 if-elif-else 后面的代码。

if-elif-else特性

        if-elif-else 语句有3个特性。
1. 如果不满足 if 的条件,就判断是否满足 elif 的条件,满足就执行 elif 内的代码块,不满足就执行 else 内的代码块。
2. elif 需与 if 搭配使用,它无法独立出现。必须先有 if ,然后才能使用 elif ,否则程序就会报错。

3. if 、elif 与 else 成互斥关系。互斥关系指的是,程序不会同时执行 if 内、 elif 内和 else 内的代码块,只会执行其中一个。else 是把 if 和 elif 判断条件无法囊括的情况全部划分到自己这里。

三种判断语句小结

        现在,我们已经学习了三种判断语句:if 、if-else 和 if-elif-else 。通过 if 、else 、elif 的搭配使用,我们可以覆盖条件判断中的所有情况,让程序按照我们预定的逻辑来执行很多自动化的工作。

if

        if 语句属于单向判断。只要条件成立,就会运行 if 内的代码块;条件不成立,程序就会跳开 if 判断。

if-else

        if-else 语句属于双向判断。如果 if 的条件不成立,就执行 else 内的代码块。if 和 else 是两个互斥关系,程序只会执行其中的一个。

if-elif-else

        if-elif-else 语句属于多向判断(3个或以上的条件)。
        如果 if 的条件不成立,就执行 elif 再判断一次,如果 elif 的条件也不成立,就执行 else 内的代码块。
        if 、elif 、 else 是互斥关系,程序只会执行其中的一个
        并且,当判断的条件超过3个时,中间的多个条件都可以使用 elif ,无论中间有多少个 elif ,它和其他 if 、elif 都是互斥关系。

嵌套语句

        之前的博文中,处理的判断条件都是独立的,不存在条件之中还有条件的情况。但是正如生活的选择题往往没有那么简单一样,在Python中也常会遇到判断条件继续细分的情况。
        对于这种在条件成立的基础上又不断细分出其他条件的情况,称为嵌套。

        定义嵌套是指将一个东西“套在”另一个东西里,就像套娃一样。同样的,嵌套语句是指将一个语句装在另一个语句里。

if嵌套

        嵌套语句在很多地方都有应用,今天咱们主要学习 if 的嵌套。
if 嵌套
在基础条件满足的情况下,再在基础条件里面增加额外的判断条件,即条件里套条件

栗子

本例第1、2行代码分别将时间13和数量2赋值给了变量 time 和 num 。
第4、5行代码判断了如果变量 time 大于等于9并且小于等于23,就输出"在打折时间内"。
第7、8行代码在变量 time 大于等于9并且小于等于23成立的条件下,判断了如果变量 num 大于等于2,就输出"全场八折"。

time = 13
num = 2if (time >= 9) and (time <= 23):print("在打折时间内")if num >= 2:print("全场八折")

外层条件

        第一层判断条件 if 。
        首先判断了如果变量 time 大于等于9并且小于等于23,就输出"在打折时间内"。

内层条件

        第二层判断条件 if 。
        在第一层判断变量 time 大于等于9并且小于等于23成立的条件下,判断了如果变量 num 大于等于2,就输出"全场八折"。

缩进4格

        Python是以缩进的空格数来区分代码块的。
        如果外层条件和内层条件的代码块都采用同样的缩进,Python 就没办法区分内外层条件是如何嵌套的。
        在这里,外层条件 if 语句内的代码块缩进四个空格。

缩进8格

        在将内层条件 if 语句写进外层条件的执行分支时,内层条件 if语句内的代码块要在原有缩进的基础上,再增加相应的缩进。
        在这里,内层条件 if 语句内的代码块在外层条件内的代码块缩进的基础上再加四个空格,也就是八个空格。
        注意⚠️ :缩进在Python语法规则中扮演重要的角色,千万不能忽视哦~

执行顺序

        我们把 if 嵌套的执行顺序,梳理成流程图后,再来整理一下程序运行流程。
        如图所示,嵌套的原则是先确定外层条件再确定内层条件,只有当外层条件成立时,才有可能进入到内层条件当中继续执行。

        需要注意的是,在相互嵌套时,一定要严格遵守不同级别代码块的缩进规范。每嵌套一层都需要在原有缩进的基础上,再增加相应的缩进。

相互嵌套

        不仅是 if 嵌套 ,在Python中,if 、if-else 和 if -elif-else 之间也可以相互嵌套。嵌套原则与 if 嵌套类似。
        如图所示,这是一段能实现分组和判断成绩的代码。
        1个外层条件 if-else 语句判断变量 gender 的值,确定男女分组,2个内层条件 if-else 语句判断变量 score 的值,确定成绩情况。

Tips

        值得注意的是,虽然使用嵌套可以大大提高代码的逻辑性和层次感。但是,任何东西都不能过度使用。一般来说,超过3层以上的嵌套会使代码变得难以阅读,不符合Python简洁表达的理念。

Debug

        博文的尾声,我们一起来梳理下,和判断语句相关的常见报错:

1. 语法错误

(1)忘记 if 、elif 、else 后的冒号:冒号常常被遗漏,这是判断语句的固定格式,有冒号程序才知道下面是谁的代码块。

(2)嵌套时,没有通过缩进来分层。在每层嵌套条件中需要额外再加四个空格。

第1个else没有缩进,导致第2个 else 找不到对应的 if 。

2. 缩进错误

        if 、elif 、else 为互斥关系,其内部的代码块需要通过缩进形成。为了保持风格统一,每个缩进用四个空格

总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/527054.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

人才推荐 | 高级半导体工艺工程师,美国凯斯西储大学电化学博士

编辑 / 木子 审核 / 朝阳 伟骅英才 伟骅英才致力于以大数据、区块链、AI人工智能等前沿技术打造开放的人力资本生态&#xff0c;用科技解决职业领域问题&#xff0c;提升行业数字化服务水平&#xff0c;提供创新型的产业与人才一体化服务的人力资源解决方案和示范平台&#x…

《深度学习风暴:掀起智能革命的浪潮》

在当今信息时代,深度学习已经成为科技领域的一股强大力量,其应用领域涵盖了从医疗到金融再到智能交互等方方面面。随着技术的不断进步和应用的不断拓展,深度学习的发展势头愈发迅猛,掀起了一股智能革命的浪潮。本文将从基本原理、应用实例、挑战与未来发展方向、与机器学习…

1923 基于单片机自动升旗、国旗控制系统设计(仿真、程序、电路图)

摘要 本文详细介绍了一款基于STC89C52单片机的国旗升降系统&#xff0c;其设计实现了按键控制国旗的匀速升降&#xff0c;同时考虑了误动作避免、半旗状态的判定、时间控制等方面的问题。文档还涵盖了STC89C52单片机的特性、硬件设计、程序控制&#xff0c;以及使用Proteus和A…

Visual Basic6.0零基础教学(2)—vb中类的介绍和基本控件的属性

Visual Basic 6.0中类的介绍和基本控件的属性 文章目录 Visual Basic 6.0中类的介绍和基本控件的属性前言一、对象的有关概念1.类2.对象3.对象的三要素4.5. VB程序的执行步骤 二、基本控件属性1.修改控件属性的练习案例 总结 前言 大家好&#xff0c;昨天我们学习了vb的简单介…

数据结构之单链表及其实现!

目录 ​编辑 1. 顺序表的问题及思考 2.链表的概念结构和分类 2.1 概念及结构 2.2 分类 3. 单链表的实现 3.1 新节点的创建 3.2 打印单链表 3.3 头插 3.4 头删 3.5 尾插 3.6 尾删 3.7 查找元素X 3.8 在pos位置修改 3.9 在任意位置之前插入 3.10 在任意位置删除…

Ps:画笔工具

画笔工具 Brush Tool是 Photoshop 中最常用的工具&#xff0c;可广泛地用于绘画与修饰工作之中。 快捷键&#xff1a;B ◆ ◆ ◆ 常用操作方法与技巧 1、熟练掌握画笔工具的操作对于使用其他工具也非常有益&#xff0c;因为 Photoshop 中许多与笔刷相关的工具有类似的选项和操…

C++进阶01 继承与派生

图源&#xff1a;文心一言 听课笔记简单整理&#xff0c;供小伙伴们参考~&#x1f95d;&#x1f95d; 第1版&#xff1a;听课的记录代码~&#x1f9e9;&#x1f9e9; 编辑&#xff1a;梅头脑&#x1f338; 审核&#xff1a;文心一言 目录 &#x1f433;课程来源 &#x1…

基于SpringBoo的火车订票管理系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

使用scrapy爬取蜻蜓FM

创建框架和项目 ### 1. 创建虚拟环境 conda create -n spiderScrapy python3.9 ### 2. 安装scrapy pip install scrapy2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple### 3. 生成一个框架并进入框架 scrapy startproject my_spider cd my_spider### 4. 生成项目 scrapy …

一个用libcurl多线程下载断言错误问题的排查

某数据下载程序&#xff0c;相同版本的代码&#xff0c;在64位系统中运行正常&#xff0c;但在32位系统中概率性出现断言错误。一旦出现&#xff0c;程序无法正常继续&#xff0c;即使重启亦不行。从年前会上领导提出要追到根&#xff0c;跟到底&#xff0c;到年后的今天&#…

数据标注专业团队

数据标注服务 在跟一些淘宝、多多商家老板合作后&#xff0c;客户一般付款后&#xff0c;中介是有20%左右的提成&#xff0c;我们主要是希望可以实现数据标注无中介化&#xff0c;有需求可以直接联系数据标注团队直接负责人&#xff0c; 若有意愿请添加添加v&#xff1a;shu_ju…

全网最最最详细-bash: wget: 未找到命令如何解决教程

在基于 Red Hat 的系统中&#xff0c;包管理器是 yum 或者在更新的版本中是 dnf。 如果你的系统是 CentOS 7 或更早版本&#xff0c;你应该使用 yum 命令来安装 wget&#xff1a; sudo yum install wget如果你的系统是 CentOS 8 或者 Fedora&#xff0c;你可能需要使用 dnf 命…