《人生苦短,我学Python》——条件判断->(if-elif-else)多向选择 条件嵌套
今天,我们来学习多向选择!if--elif--else
if
后的语句是当 if 判断条件成立时,执行的操作。elif
后的语句是当 if 判断不成立时,再判断一次,如果成立,执行的操作。else
后的语句是当以上所有判断条件都不成立时,执行的操作(即把 if 和 elif 判断条件无法囊括的情况全部划分到else这里)
下面就让我们来详细看看吧!
文章目录
- 一、要点先知:
- 二、基础讲解:
- 1. elif:
- 2. if-elif-else 语句的特性:
- 3. 对比三种条件判断形式:
- 三、拓展讲解:
- 1. 条件嵌套:
- 2. 注意事项:
- (1). 语法错误
- (2). 缩进错误
- 四、刷题巩固:
- 1. 简化代码:
- 2. 释放大招:
- 3. 两个较大数的乘积:
一、要点先知:
1️⃣第一种情况,程序运行到 if 判断时,如果条件为真,执行 if 的代码块。
- 完成后,运行 if-elif-else 后面的代码。
2️⃣第二种情况,程序运行到 if 判断时,如果条件为假,程序就直接跳开 if 判断的执行部分,再次运行到 elif 的判断,如果条件为真,执行 elif 的代码块。
- 完成后,运行 if-elif-else 后面的代码。
3️⃣第三种情况,程序运行到 elif 判断时,如果条件为假,程序就直接跳开 elif 判断的执行部分,运行 else 的代码块。
- 完成后,运行 if-elif-else 后面的代码。
二、基础讲解:
1. elif:
一个关键字,是 else 和 if 的缩写。[C语言中写作:if else() ]
- 如果之前的 if 判断条件不成立,就再做一次新的判断,条件成立则执行 elif 后面的代码。
⚠️两个注意点:
- 和 if ,else 一样,elif 语句的最后也需要一个
冒号
。 - elif 内的代码块,还是缩进
四个
空格
2. if-elif-else 语句的特性:
-
如果不满足 if 的条件,就判断是否满足 elif 的条件,满足就执行 elif 内的代码块,不满足就执行 else 内的代码块。
-
elif 需与 if 搭配使用,它
无法独立出现
。必须先有 if ,然后才能使用 elif ,否则程序就会报错。
-
if 、elif 与 else 成
互斥
关系。
- 互斥关系指的是,程序不会同时执行 if 内、 elif 内和 else 内的代码块,只会执行
其中一个
。
3. 对比三种条件判断形式:
现在,我们已经学习了三种判断语句:
if
、if-else
和if-elif-else
- 通过 if 、else 、elif 的搭配使用,我们可以覆盖条件判断中的所有情况,让程序按照我们预定的逻辑来执行很多自动化的工作。
✨if 语句属于单向判断。
- 只要条件成立,就会运行 if 内的代码块;条件不成立,程序就会跳开 if 判断。
✨if-else 语句属于双向判断。
- 如果 if 的条件不成立,就执行 else 内的代码块。
✨if-elif-else 语句属于多向判断(3个或以上的条件)。
- 如果 if 的条件不成立,就执行 elif 再判断一次,如果 elif 的条件也不成立,就执行 else 内的代码块。
并且,当判断的条件超过3个时,中间的多个条件都可以使用 elif ,无论中间有多少个 elif ,它和其他 if 、elif 都是互斥关系,即只会执行其中一个!
三、拓展讲解:
1. 条件嵌套:
之前处理的判断条件都是独立
的,不存在条件之中还有条件
的情况。
但是正如生活的选择题往往没有那么简单一样,在Python中也常会遇到判断条件继续细分的情况。
对于这种在条件成立的基础上又不断细分出其他条件的情况,称为嵌套
。
定义:嵌套是指将一个东西“套在”另一个东西里,就像套娃一样。
同样的,嵌套语句是指将一个语句装在另一个语句里。
- 即在基础条件满足的情况下,再在基础条件里面增加额外的判断条件,即条件里套条件。只有当外层条件成立时,才有可能进入到内层条件当中继续执行。
我们知道,Python是以缩进的空格数来区分代码块的
如果外层条件和内层条件的代码块都采用同样的缩进,Python 就没办法区分内外层条件是如何嵌套的。所以:
-
外层条件
if 语句内的代码块缩进四个空格
。 -
内层(第二层)条件 if语句内的代码块要在
原有缩进的基础上
,再增加
相应的缩进,也就是八个空格。
注意⚠️ :缩进在Python语法规则中扮演重要的角色,千万不能忽视哦~
不仅是 if 嵌套 ,在Python中,if 、if-else 和 if -elif-else 之间也可以相互嵌套。
- 嵌套原则与 if 嵌套类似。
如图所示,这是一段能实现分组和判断成绩的代码。
1个外层条件 if-else 语句判断变量 gender 的值,确定男女分组,2个内层条件 if-else 语句判断变量 score 的值,确定成绩情况。
值得注意的是,虽然使用嵌套可以大大提高代码的逻辑性和层次感。
但是,任何东西都不能过度使用❗️
- 一般来说,超过3层以上的嵌套会使代码变得难以阅读,不符合Python简洁表达的理念。
2. 注意事项:
(1). 语法错误
(1)忘记 if 、elif 、else 后的冒号:
冒号常常被遗漏,这是判断语句的固定格式,有冒号程序才知道下面是谁的代码块。
(2)嵌套时,没有通过缩进来分层:
在每层嵌套条件中需要额外再加四个空格。
第1个else没有缩进,导致第2个 else 找不到对应的 if
(2). 缩进错误
if 、elif 、else 为互斥关系,其内部的代码块需要通过缩进形成。
为了保持风格统一,每个缩进用四个空格。
四、刷题巩固:
1. 简化代码:
使用elif,让代码变得简洁。
初始代码:
myWeight = 80
myHeight = 1.8
BMI = myWeight/(myHeight*myHeight)
if BMI < 18.5:print("under weight")
else:if BMI < 23.9:print("normal weight")else:if BMI < 27:print("over weight")else:if BMI <32:print("fat")else:print("obese")
示例代码如下:
myWeight=80
myHeight=1.8
BMI=myWeight/(myHeight*myHeight)
if BMI < 18.5 :print('under weight')
elif BMI <23.9 :print("normal weight")
elif BMI <27 :print("over weight")
elif BMI <32 :print("fat")
else :print('obese')
2. 释放大招:
有两个变量 技能状态 skill 和点击状态 click ,分别给它们赋值 110 和 1 。
第一层判断使用 if语句 判断,如果 skill 大于等于100,就输出"大招准备就绪",
同时进入第二层判断,使用 if-else 语句判断,如果 click 等于1,就输出"大招已发送",否则,输出"大招未发送"。
示例代码如下:
skill=110
click=1
if skill>=100 :print("大招准备就绪")if click==1 :print("大招已发送")else :print("大招未发送")
3. 两个较大数的乘积:
已知:
a = 135
b = 98
c = 129
在a、b、c中选择两个数字相乘,输出两个数最大的乘积number
示例代码如下:
a=135
b=98
c=129
number=a*b
if number<=a*c :number=a*c
if number<=b*c :number=b*c
print(number)
好了,到这里,python中的条件判断算是结束了,相信你也是收获满满吧!
相关文章:

《人生苦短,我学Python》——条件判断->(if-elif-else)多向选择 条件嵌套
今天,我们来学习多向选择!if--elif--else if 后的语句是当 if 判断条件成立时,执行的操作。elif 后的语句是当 if 判断不成立时,再判断一次,如果成立,执行的操作。else 后的语句是当以上所有判断条件都不成…...
MongoDB 数据库性能优化技巧
原文:MongoDB 数据库性能优化技巧 (techdatafuture.com) MongoDB 是一款灵活且可扩展的NoSQL数据库,为了提高其性能,我们可以采取一些优化技巧。本文将介绍一些MongoDB性能优化的关键点,包括索引的使用、查询优化、数据模型设计和…...

网络安全人才缺口超百万,如今的就业情况怎样?
网络安全人才缺口超百万,如今的就业情况怎样? 2022年9月7日,国家网络安全宣传周准时开始。本次网络安全宣传周和以前一样,主要目的都是为了普及网络安全知识,提高网络安全的防护技能,提升对电信网络诈骗的…...
「MySQL」MySQL面试题全解析:常见问题与高级技巧详解
MySQL面试题全解析:常见问题与高级技巧详解 1. 什么是数据库?2. 什么是MySQL?3. 什么是SQL?4. 什么是主键?5. 什么是外键?6. 请解释索引是什么以及为什么使用索引?7. 什么是事务?8. …...

【USRP】产品型号、参数、架构全解析系列 6:N320 / N321
一、USRP 简介 通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发,被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机&am…...
Apifox 常用 JS 脚本
前置脚本常用 1、时间戳生成(秒级): // 1、生成秒级时间戳到全局变量中 //let timestamp parseInt(new Date().getTime() / 1000) //pm.globals.set(timestamp, timestamp) // 2、生成秒级时间戳到全局变量中 pm.globals.set(timestamp, p…...
防止SQL注入的四种方案
一、什么是SQL注入? SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服…...

java单元测试
版本区别 特性Junit 4Junit 5在当前类的所有测试方法之前执行。注解在静态方法上。此方法可以包含一些初始化代码。BeforeClassBeforeAll在当前类中的所有测试方法之后执行。注解在静态方法上。此方法可以包含一些清理代码。AfterClassAfterAll在每个测试方法之前执行。注解在…...

【LeetCode】双指针求解和为s的两个数字
Problem: 剑指 Offer 57. 和为s的两个数字 文章目录 题目解析算法思路分析复杂度Code 题目解析 首先来讲解一下本题的思路 我们看到本题的意思很简单,就是去这个nums这个数组中进行寻找,如果找到了两个数相加之和为target的话,那构成一个结果…...

opencv识别一张图片的多个红框,并截取红框的内容
需求 需要获取图片的红框的内容,实体的图片我就不放了 获取红框 先截取获得图片的多个轮廓 import cv2 import numpy as np # 加载图像并转换为灰度图像 image cv2.imread(image6.jpg) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减…...
数据库-事务
介绍: 事务是一组操作的集合,它是一个不可分割的工作单位,事物会把所有的操作作为一个整体一起向系统 提交或撤销操作请求,即这些操作要么同时成功,要么同时失败 操作:事务控制 开启事务:start…...
MySQL 使用开源审计插件
文章目录 前言1. 审计插件下载2. 审计插件参数2.1 server_audit_events2.2 server_audit_excl_users2.3 server_audit_output_type2.4 server_audit_file_path2.5 server_audit_file_rotate_now2.6 server_audit_file_rotate_size2.7 server_audit_file_rotations2.8 server_au…...
Python入门教程 | Python3 集合(Set)
Python3 集合(Set) 集合(set)是一个无序的不重复元素序列。 集合中的元素不会重复,并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合,元素之间用逗号 , 分隔, 或…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法2.0
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...

【C++模拟实现】反向迭代器的实现
【C模拟实现】反向迭代器的实现 目录 【C模拟实现】反向迭代器的实现反向迭代器的代码示例反向迭代器的模拟实现要点引入iterator模版参数rbegin()和rend()的实现 作者:爱写代码的刚子 时间:2023.9.5 前言:本篇博客主要介绍反向迭代器的实现&…...

Kubernetes技术--k8s核心技术持久化存储
有时候需要在集群中进行一些重要的数据进行持久化存储,然后需要的时候再进行挂载,那么下面我们一起来看看如何实现数据的持久化存储操作。 1.nfs网络存储 -1.找一台服务器做nfs的服务端,安装nfs。(这里我们直接在master上实现)。 这里应该找再单独的搭建一个node节点做持…...

【80天学习完《深入理解计算机系统》】第十四天 复习第三章
专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录) 文章字体风格: 红色文字表示&#…...

库中是如何实现string类的?
🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 …...

无涯教程-JavaScript - WORKDAY.INTL函数
描述 WORKDAY.INTL函数返回带有自定义周末参数的指定工作日数之前或之后的日期的序列号。周末参数指示哪些和多少天是周末。周末和指定为假期的任何日子均不视为工作日。 语法 WORKDAY.INTL (start_date, days, [weekend], [holidays])争论 Argument描述Required/OptionalS…...

STM32--蓝牙
本文主要介绍基于STM32F103C8T6和蓝牙模块实现的交互控制 简介 蓝牙(Bluetooth)是一种用于无线通信的技术标准,允许设备在短距离内进行数据交换和通信。它是由爱立信(Ericsson)公司在1994年推出的,以取代…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...

算法笔记2
1.字符串拼接最好用StringBuilder,不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...