Python:条件分支 if 语句全讲解

Python:条件分支 if 语句全讲解


如果我拿出下面的代码,阁下该做何应对?

if not reset_excuted and (terminated or truncated):
	...
else:
    ...
----

前言:

消化论文代码的时候看到这个东西直接大脑冻结,没想过会在这么基础的东西上犯难

即便是冰之勇者也能学会 大概吧

本文初编辑于2024.10.10

CSDN主页:https://blog.csdn.net/rvdgdsva

博客园主页:https://www.cnblogs.com/hassle

博客园本文链接:https://www.cnblogs.com/hassle/p/18456599

文章目录

  • Python:条件分支 if 语句全讲解
    • 前言:
    • 运算符优先级
      • 优先级解析示例
        • 示例 1: 使用括号
        • 示例 2: 不使用括号
        • 复杂示例
    • 复杂if语句判断
      • 分析条件
        • 进入上面的分支的条件
        • 进入下面的分支的条件
      • 总结条件表
      • 结论
    • 多分支语句elif
    • 德摩根定律
      • 举例说明
        • 示例 1:第一条定律
        • 示例 2:第二条定律

运算符优先级

在 Python 中,布尔运算符的优先级从高到低的顺序如下:

  1. 括号 ():最高优先级,可以用于明确运算顺序。
  2. not:次高优先级。
  3. and:次低优先级。
  4. or:最低优先级。

优先级解析示例

示例 1: 使用括号
a = True
b = False
c = True

result = (a and not b) or c

在这个例子中:

  1. 括号 首先被计算:
    • a and not bnot b 计算为 not False,结果为 True
    • 然后,True and True 计算为 True
  2. 最后,整体表达式变为 True or c,结果是 True
示例 2: 不使用括号
x = False
y = True
z = False

result = x or y and not z

在这个例子中:

  1. 优先级 按照 not > and > or
    • not z 计算为 not False,结果是 True
  2. 然后表达式转为 x or y and True
  3. 接着 y and True 计算为 True
  4. 最终计算为 x or True,结果是 True
复杂示例
p = True
q = False
r = False

result = not (p and q) or r

在这个示例中:

  1. 括号 首先被计算:
    • p and q 计算为 True and False,结果是 False
  2. 然后,not False 计算为 True
  3. 最终表达式变为 True or r,结果是 True

复杂if语句判断

在表达式 if not a and b 中,not 只对 a 生效,不影响 b

  • not 的优先级高于 and,这意味着它会先处理 a 的值。
  • 首先计算 not a,这将返回 a 的布尔值的相反值。
  • 然后,使用 and 运算符将结果与 b 进行比较。
if not para_A and (para_B or para_C):
    print("进入上面的分支")
else:
    print("进入下面的分支")

回到开头的示例,细细的捋一捋,在这段代码中:

在这里,not只对para_A生效,而不对(para_B or para_C)生效

要推算在什么情况下进入上面的分支或下面的分支,可以分析条件的每个部分。

分析条件

  1. not para_A:要求 para_AFalse

    • 这意味着要进入上面的分支,para_A 必须是 False
  2. (para_B or para_C):要求 para_Bpara_C 至少有一个为 True

    • 这意味着只要 para_BTruepara_CTrue,这个部分就成立。
进入上面的分支的条件

整体条件为 not para_A and (para_B or para_C),因此要进入上面的分支,必须满足以下条件:

  • 条件 1para_AFalse
  • 条件 2para_BTruepara_CTrue(至少有一个为 True)。
进入下面的分支的条件

为了进入下面的分支,条件需要不成立,即:

  1. 条件 Apara_ATrue

    • 这时 not para_AFalse,条件就不成立。
  2. 条件 Bpara_AFalse,但 para_Bpara_C 都是 False

    • 这时 (para_B or para_C)False,条件也不成立。

总结条件表

para_Apara_Bpara_C结果
FalseTrueFalse进入上面的分支
FalseFalseTrue进入上面的分支
FalseTrueTrue进入上面的分支
TrueFalseFalse进入下面的分支
TrueTrueTrue进入下面的分支
FalseFalseFalse进入下面的分支

结论

  • 进入上面的分支:当 para_AFalse,且 para_Bpara_C 至少有一个为 True
  • 进入下面的分支:当 para_ATrue 或者 para_AFalse,但 para_Bpara_C 都为 False

多分支语句elif

都写那么多了,干脆再补点东西显得更完整吧

在 Python 中,elif 是 “else if” 的缩写,用于在 if 语句中进行多重条件判断。它允许你在第一个 if 条件为 False 的情况下继续检查其他条件,从而实现更多的分支逻辑。

if condition1:
    # 当 condition1 为 True 时执行的代码
elif condition2:
    # 当 condition1 为 False 且 condition2 为 True 时执行的代码
elif condition3:
    # 当 condition1 和 condition2 都为 False 且 condition3 为 True 时执行的代码
else:
    # 当上面的所有条件都为 False 时执行的代码

德摩根定律

在j实际代码应用中,你基本用不上这个定律,上面的东西已经可以解决绝大部分问题了。但如果程序非要在if条件语句上向你发难,至少你也知道怎么应对

德摩根定律是布尔代数中的两个重要定律,它们提供了关于逻辑运算(与、或和非)之间关系的重要公式。这两个定律如下:

第一条定律
not ( A   o r   B ) ≡ not A   a n d  not B \text{not}(A\ or\ B) \equiv \text{not} A \ and\ \text{not} B not(A or B)notA and notB
解释:否定 A 或 B 相当于 AB 的否定相与。

第二条定律
not ( A   a n d   B ) ≡ not A   o r  not B \text{not}(A \ and\ B) \equiv \text{not} A \ or\ \text{not} B not(A and B)notA or notB
解释:否定 A 且 B 相当于 A 的否定或 B 的否定。

举例说明

我们可以通过几个示例来理解这些定律:

示例 1:第一条定律

考虑 A = TrueB = False

  • 计算 not(A or B)
    • A or BTrue
    • not(A or B)False
  • 计算 not A and not B
    • not AFalse
    • not BTrue
    • not A and not BFalse

结果是一致的:not(A or B) = Falsenot A and not B = False

示例 2:第二条定律

考虑 A = TrueB = False

  • 计算 not(A and B)
    • A and BFalse
    • not(A and B)True
  • 计算 not A or not B
    • not AFalse
    • not BTrue
    • not A or not BTrue

同样,结果是相等的:not(A and B) = Truenot A or not B = True
ot(A and B): - A and BFalse -not(A and B)True`

  • 计算 not A or not B
    • not AFalse
    • not BTrue
    • not A or not BTrue

同样,结果是相等的:not(A and B) = Truenot A or not B = True

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

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

相关文章

5个免费ppt模板网站推荐!轻松搞定职场ppt制作!

每次过完小长假,可以明显地感觉到,2024这一年很快又要结束了,不知此刻的你有何感想呢?是满载而归,还是准备着手制作年终总结ppt或年度汇报ppt呢? 每当说到制作ppt,很多人的第一反应&#xff0c…

ElasticSearch备考 -- Multi match

一、题目 索引task有3个字段a、b、c,写一个查询去匹配这三个字段为mom,其中b的字段评分比a、c字段大一倍,将他们的分数相加作为最后的总分数 二、思考 通过题目要求对多个字段进行匹配查询,可以考虑multi match、bool query操作。…

vivo全新AI战略“蓝心智能”发布 原系统5亮相开发者大会

​10月10日,2024 vivo开发者大会在深圳国际会展中心举办,大会主题为“同心同行”。会上,vivo正式发布全新AI战略——“蓝心智能”,同时带来全面升级的自研蓝心大模型矩阵、原系统5(OriginOS 5)、蓝河操作系…

PHP中的HTTP请求:简化你的网络通信

在当今的网络应用开发中,PHP作为一种流行的服务器端脚本语言,经常需要与外部服务进行通信。这通常涉及到发送HTTP请求来获取或提交数据。幸运的是,PHP提供了多种方式来简化HTTP请求的过程,使得网络通信变得轻而易举。 PHP中的HTTP…

网络编程(17)——asio多线程模型IOThreadPool

十七、day17 之前我们介绍了IOServicePool的方式,一个IOServicePool开启n个线程和n个iocontext,每个线程内独立运行iocontext, 各个iocontext监听各自绑定的socket是否就绪,如果就绪就在各自线程里触发回调函数。为避免线程安全问题&#xf…

AVL树如何维持平衡

1.AVL树的特性 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查 找元素相当于在顺序表中搜索元素,效率低下。因此,两位俄罗斯的数学家G.M.Adelson-Velskii 和E.M.Landis在1962年 发明了一种…

音频文件重采样 - python 实现

在处理音频文件的时候,经常会将原音频进行统一的重采样处理,设置为相同的采样率,本示例,就是将44100采样率的音频,重采样为16000. 安装对应的python 库:librosa 和 soundfile. pip install soundfile pip i…

详细解读“霸王面”战术

“霸王面”战术是指在没有得到雇主面试通知的情况下,强行加入面试,以此争取工作机会的求职策略。以下将以3000字左右的篇幅,通过生动形象的例子详细解释这一战术。 一、背景介绍 在当今竞争激烈的就业市场中,求职者需要经历网申…

国外火出圈儿的PM御用AI编程工具Bolt.new效果干不过国产的CodeFlying?号称全新定义全栈开发流程?

不知道大家最近有没有发现国外的很多AI都在挤破脑袋想去提升大模型的编程能力, 离我们最近的是上周Openai 发布的全新模型GPT-4o-Canvas, 拥有超强的代码编写能力。 另外还有LlamaCoder、Cursor、Claude artifacts、Replit... 光是今年一年就推出了好…

【笔记学习篇】一篇文章搞定Mybatis-快速回顾

概述 5.1.1 Mybatis简介 Mybatis是一款优秀的持久层框架,它以sql为中心,支持定制化sql、存储过程以及高级映射。 使用Mybatis框架,可以无需手动编写基础的JDBC代码、无需手动设置参数和转换结果集到对象。 Mybatis可以使用简单的xml或注解来…

2024.10月7~10日 进一步完善《电信资费管理系统》

一、新增的模块: 在原项目基础上,新增加了以下功能: 1、增加AspectJ 框架的AOP 异常记录和事务管理模块。 2、增加SpringMVC的拦截器,实现登录 控制页面访问权限。 3、增加 Logback日志框架,记录日志。 4、增加动态验…

ssm基于Javaee的影视创作论坛的设计与实现

系统包含:源码论文 所用技术:SpringBootVueSSMMybatisMysql 免费提供给大家参考或者学习,获取源码请私聊我 需要定制请私聊 目 录 目 录 III 第1章 绪论 1 1.1选题动因 1 1.2目的和意义 1 1.3论文结构安排 2 第2章 开发环境与技术 …

Auto-Animate:是一款零配置、即插即用的动画工具,可以为您的 Web 应用添加流畅的过渡效果

嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 用户体验成为了检验产品成功与否的关键因素。而动画效果,作为提升用户体验的重要手段,在网页和应用开发中扮演着举足轻重的角色…

机器学习、深度学习评价指标汇总:TP、TN、FP、FN、AP、mAP、IoU、mAP@3、Prec@10、 Acc@10

系列文章目录 文章目录 系列文章目录一、真正例(True Positive)、假正例(False Positive)、真负例(True Negative)和假负例(False Negative)是评估分类模型性能的重要概念。1. 定义2…

攻防世界(CTF)~Reverse-easyRE1

题目介绍 下载附件后一个32位一个64位 64位的放到ExeinfoPE查看一下有无壳子(无壳) 放IDA看一下伪代码,习惯性看一下main函数,直接发现了flag flag{db2f62a36a018bce28e46d976e3f9864}

2024互联网下载神器IDM6.42你值得拥有

🔥 互联网下载神器大揭秘!IDM6.42你值得拥有 🚀 Hey,各位小伙伴们,今天我要给你们安利一款我超爱的软件——Internet Download Manager 6.42(简称IDM),这款下载器简直就是下载界的“…

MinIO分片上传超大文件(纯服务端)

目录 一、MinIO快速搭建1.1、拉取docker镜像1.2、启动docker容器 二、分片上传大文件到MinIO2.1、添加依赖2.2、实现MinioClient2.3、实现分片上传2.3.0、初始化MinioClient2.3.1、准备分片上传2.3.2、分片并上传2.3.2.1、设置分片大小2.3.2.2、分片 2.3.3、分片合并 三、测试3…

Java基础-泛型机制

文章目录 为什么引入泛型泛型的基本使用泛型类泛型接口泛型方法泛型数组正确的数组声明使用场景如何理解Java中的泛型是伪泛型?泛型中类型擦除 泛型数组:如何正确的初始化泛型数组实例? 为什么引入泛型 引入泛型的意义在于: 适用…

谷歌AI大模型Gemini API快速入门及LangChain调用视频教程

1. 谷歌Gemini API KEY获取及AI Studio使用 要使用谷歌Gemini API,首先需要获取API密钥。以下是获取API密钥的步骤: 访问Google AI Studio: 打开浏览器,访问Google AI Studio。使用Google账号登录,若没有账号&#xf…

SpringBoot中间件Docker

Docker(属于C/S架构软件) 简介与概述 1.Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux …