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

《人生苦短,我学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 语句的特性:

  1. 如果不满足 if 的条件,就判断是否满足 elif 的条件,满足就执行 elif 内的代码块,不满足就执行 else 内的代码块。

  2. elif 需与 if 搭配使用,它无法独立出现。必须先有 if ,然后才能使用 elif ,否则程序就会报错。
    在这里插入图片描述

  3. if 、elif 与 else 成互斥关系。

  • 互斥关系指的是,程序不会同时执行 if 内、 elif 内和 else 内的代码块,只会执行其中一个
    在这里插入图片描述

3. 对比三种条件判断形式:

现在,我们已经学习了三种判断语句:
if if-elseif-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)多向选择 条件嵌套

今天&#xff0c;我们来学习多向选择&#xff01;if--elif--else if 后的语句是当 if 判断条件成立时&#xff0c;执行的操作。elif 后的语句是当 if 判断不成立时&#xff0c;再判断一次&#xff0c;如果成立&#xff0c;执行的操作。else 后的语句是当以上所有判断条件都不成…...

MongoDB 数据库性能优化技巧

原文&#xff1a;MongoDB 数据库性能优化技巧 (techdatafuture.com) MongoDB 是一款灵活且可扩展的NoSQL数据库&#xff0c;为了提高其性能&#xff0c;我们可以采取一些优化技巧。本文将介绍一些MongoDB性能优化的关键点&#xff0c;包括索引的使用、查询优化、数据模型设计和…...

网络安全人才缺口超百万,如今的就业情况怎样?

网络安全人才缺口超百万&#xff0c;如今的就业情况怎样&#xff1f; 2022年9月7日&#xff0c;国家网络安全宣传周准时开始。本次网络安全宣传周和以前一样&#xff0c;主要目的都是为了普及网络安全知识&#xff0c;提高网络安全的防护技能&#xff0c;提升对电信网络诈骗的…...

「MySQL」MySQL面试题全解析:常见问题与高级技巧详解

MySQL面试题全解析&#xff1a;常见问题与高级技巧详解 1. 什么是数据库&#xff1f;2. 什么是MySQL&#xff1f;3. 什么是SQL&#xff1f;4. 什么是主键&#xff1f;5. 什么是外键&#xff1f;6. 请解释索引是什么以及为什么使用索引&#xff1f;7. 什么是事务&#xff1f;8. …...

【USRP】产品型号、参数、架构全解析系列 6:N320 / N321

一、USRP 简介 通用软件无线电外设( USRP ) 是由 Ettus Research 及其母公司National Instruments设计和销售的一系列软件定义无线电。USRP 产品系列由Matt Ettus领导的团队开发&#xff0c;被研究实验室、大学和业余爱好者广泛使用。 大多数 USRP 通过以太网线连接到主机&am…...

Apifox 常用 JS 脚本

前置脚本常用 1、时间戳生成&#xff08;秒级&#xff09;&#xff1a; // 1、生成秒级时间戳到全局变量中 //let timestamp parseInt(new Date().getTime() / 1000) //pm.globals.set(timestamp, timestamp) // 2、生成秒级时间戳到全局变量中 pm.globals.set(timestamp, p…...

防止SQL注入的四种方案

一、什么是SQL注入&#xff1f; SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严&#xff0c;攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句&#xff0c;在管理员不知情的情况下实现非法操作&#xff0c;以此来实现欺骗数据库服…...

java单元测试

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

【LeetCode】双指针求解和为s的两个数字

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

opencv识别一张图片的多个红框,并截取红框的内容

需求 需要获取图片的红框的内容&#xff0c;实体的图片我就不放了 获取红框 先截取获得图片的多个轮廓 import cv2 import numpy as np # 加载图像并转换为灰度图像 image cv2.imread(image6.jpg) gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 应用高斯模糊以减…...

数据库-事务

介绍&#xff1a; 事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位&#xff0c;事物会把所有的操作作为一个整体一起向系统 提交或撤销操作请求&#xff0c;即这些操作要么同时成功&#xff0c;要么同时失败 操作&#xff1a;事务控制 开启事务&#xff1a;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 集合&#xff08;Set&#xff09; 集合&#xff08;set&#xff09;是一个无序的不重复元素序列。 集合中的元素不会重复&#xff0c;并且可以进行交集、并集、差集等常见的集合操作。 可以使用大括号 { } 创建集合&#xff0c;元素之间用逗号 , 分隔&#xff0c; 或…...

视频汇聚/视频云存储/视频监控管理平台EasyCVR安全检查的相关问题及解决方法2.0

开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多…...

【C++模拟实现】反向迭代器的实现

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

Kubernetes技术--k8s核心技术持久化存储

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

【80天学习完《深入理解计算机系统》】第十四天 复习第三章

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客&#xff0c;如有问题交流&#xff0c;欢迎评论区留言&#xff0c;一定尽快回复&#xff01;&#xff08;大家可以去看我的专栏&#xff0c;是所有文章的目录&#xff09;   文章字体风格&#xff1a; 红色文字表示&#…...

库中是如何实现string类的?

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;&#x1f35f;&#x1f32f;C语言进阶 &#x1f511;个人信条: &#x1f335;知行合一 &#x1f…...

无涯教程-JavaScript - WORKDAY.INTL函数

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

STM32--蓝牙

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

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module

1、为什么要修改 CONNECT 报文&#xff1f; 多租户隔离&#xff1a;自动为接入设备追加租户前缀&#xff0c;后端按 ClientID 拆分队列。零代码鉴权&#xff1a;将入站用户名替换为 OAuth Access-Token&#xff0c;后端 Broker 统一校验。灰度发布&#xff1a;根据 IP/地理位写…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

《基于Apache Flink的流处理》笔记

思维导图 1-3 章 4-7章 8-11 章 参考资料 源码&#xff1a; https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...