【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 = 3

if 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 = 2

if (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 为互斥关系,其内部的代码块需要通过缩进形成。为了保持风格统一,每个缩进用四个空格

总结

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Decontam去污染:一个尝试

为了程序运行的便利性&#xff0c;不想将Decontam放到windows的Rstudio里面运行&#xff0c;需要直接在Ubuntu中运行&#xff0c;并且为了在Decontam时进行其他操作&#xff0c;使用python去运行R 首先你需要有一个conda环境&#xff0c;安装了R&#xff0c;Decontam&#xff0…

day 49 动态规划 part 10● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II

看了题解&#xff0c;第一种暴力&#xff0c;两个for循环。 class Solution { public:int maxProfit(vector<int>& prices) {int result 0;for (int i 0; i < prices.size(); i) {for (int j i 1; j < prices.size(); j){result max(result, prices[j] -…

使用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 …

LeetCode:143.重排链表

143. 重排链表 解题过程 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListNode next) { this.val val; this.next next; …

数据结构——堆的应用 Topk问题

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

实验一:华为VRP系统的基本操作

1.1实验介绍 1.1.1关于本实验 本实验通过配置华为设备&#xff0c;了解并熟悉华为VRP系统的基本操作 1.1.2实验目的 理解命令行视图的含义以及进入离开命令行视图的方法 掌握一些常见的命令 掌握命令行在线帮助的方法 掌握如何撤销命令 掌握如何使用命令快捷键 1.1.3实验组网 …

挑战杯 基于设深度学习的人脸性别年龄识别系统

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 基于深度学习机器视觉的…

React组件(函数式组件,类式组件)

函数式组件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>React Demo</title> <!-- 引…

阿里云服务器9元1个月优惠价格表

阿里云服务器9元1个月优惠价格表&#xff0c;用不上9元&#xff0c;又降价了&#xff0c;只要5元。阿里云服务器一个月多少钱&#xff1f;最便宜5元1个月。阿里云轻量应用服务器2核2G3M配置61元一年&#xff0c;折合5元一个月&#xff0c;2核4G服务器30元3个月&#xff0c;2核2…

深入探讨AI团队的角色分工

目录 前言1. 软件工程师&#xff1a;构建系统基石的关键执行者2. 机器学习工程师&#xff1a;数据与模型的塑造专家3. 机器学习研究员&#xff1a;引领算法创新的智囊4. 机器学习应用科学家&#xff1a;理论与实践的巧妙连接5. 数据分析师&#xff1a;洞察数据&#xff0c;智慧…

C语言初学10:typedef

一、作用 为用户定义的数据类型取一个新名字 二、对结构体使用typedef定义新的数据类型名字 #include <stdio.h> #include <string.h>typedef struct Books //使用 typedef 来定义一个新的数据类型名字 {char title[50];} book;int main( ) {//book是typedef定…

图片在div完全显示

效果图&#xff1a; html代码&#xff1a; <div class"container" style" display: flex;width: 550px;height: 180px;"><div class"box" style" color: red; background-color:blue; width: 50%;"></div><div …

基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的无人机三维路径规划(MATLAB)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

企业如何安全参与开源项目?

【开源三句半】 企业参与开源潮&#xff0c; 安全创新都重要&#xff0c; 持续投入不可少&#xff0c; 眼光独到。 开源已经成为构建现代软件的常见方式&#xff0c;这不仅局限于IT技术本身&#xff0c;更推动了多个行业的数字化发展。企业决定引入开源项目打造商业软件时&…

NeRF模型NeRF模型

参考视频&#xff1a;https://www.youtube.com/watch?vHfJpQCBTqZs&ab_channelVision%26GraphicsSeminaratMIT NeRF模型的输入输出: 输入: (x, y, z): 一个三维空间坐标,代表场景中的一个位置点(θ, φ): 视线方向,θ表示与y轴的夹角,φ表示与x轴的夹角,用两个角度可以…

random标准模块

一、概述 在 Python 中&#xff0c;random 是一个内置模块&#xff0c;用于生成随机数。它提供了各种用于生成随机数的函数&#xff0c;包括伪随机数生成器、随机序列操作等。 1、需要导包 不会自动导入&#xff0c;需要显示的将random模块导入 import random2、源码分析&…

力扣最热100题——56.合并区间

吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述 Java解法一&#xff1a;排序然后原地操作 具体代码如下 Java解法二&#xff1a;new一个list&#xf…

K8S - 在任意node里执行kubectl 命令

当我们初步安装玩k8s &#xff08;master 带 2 nodes&#xff09; 时 正常来讲kubectl 只能在master node 里运行 当我们尝试在某个 node 节点来执行时&#xff0c; 通常会遇到下面错误 看起来像是访问某个服务器的8080 端口失败了。 原因 原因很简单 , 因为k8s的各个组建&…

使用Tokeniser估算GPT和LLM服务的查询成本

将LLM集成到项目所花费的成本主要是我们通过API获取LLM返回结果的成本&#xff0c;而这些成本通常是根据处理的令牌数量计算的。我们如何预估我们的令牌数量呢&#xff1f;Tokeniser包可以有效地计算文本输入中的令牌来估算这些成本。本文将介绍如何使用Tokeniser有效地预测和管…

IM6ULL学习总结(四-七-1)输入系统应用编程

第7章 输入系统应用编程 7.1 什么是输入系统 ⚫ 先来了解什么是输入设备&#xff1f; 常见的输入设备有键盘、鼠标、遥控杆、书写板、触摸屏等等,用户通过这些输入设备与 Linux 系统进行数据交换。 ⚫ 什么是输入系统&#xff1f; 输入设备种类繁多&#xff0c;能否统一它们的…