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

news2024/10/11 2:23:41

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.coloradmin.cn/o/2203867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高含金量WebGIS学习教程?

智慧校园——适合0基础入门 智慧交通——适合0基础入门 VUE-适合前端进阶 Mapbox项目开发实例 Openlayers零基础入门 智慧机场——适合有前端基础 threejs三维开发入门 三维进阶:cesium零基础入门教程 面试讲解:剖析地信大厂技术面试真题&#x…

【算法】DP系列之 斐波那契数列模型

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1)第 N 个泰波那契数 .1- 题目解析 .2- 代码编写 2)三步问题 .1- 题目解析 .2- 代码编写 3)使用最小花费爬楼梯 .1- 题目解析 .2- 代码编写 4)解码…

vue3实现 长列表虚拟滚动

1、直接看代码 <template><!--定义一个大容器&#xff0c;此容器可以滚动--><div class"view" ref"viewRef" scroll"handleScroll"><!--定义一个可以撑满整个data的容器&#xff0c;主要是让父元素滚动起来--><div …

EasyExcel读入数字类型数据时出现小数位丢失精度问题

这里写自定义目录标题 问题现象解决方案 问题现象 目前使用easyExcel读取导入文档时发现文档中的小数值4076204076.65会被读取为4076204076.6500001 尝试去查看了excel解压后的文件&#xff0c;发现这条数据在xml里存储的值就是4076204076.6500001&#xff0c;即是excel存储小…

java中的I/O(8个案例+代码+效果图)

目录 1.File类 1&#xff09;常用构造方法 1&#xff09;File(String pathname) 2&#xff09;File(String parent, String child) 3&#xff09;File(File parent, String child) 2&#xff09;常用方法 1&#xff09;boolean canRead() 2&#xff09;boolean canWrite() 3&am…

诺奖现场采访2024物理学得主Hinton:当前AI革命堪比工业革命,且将在智力上全面超越人类

当地时间昨天&#xff0c;2024年10月8日&#xff0c;瑞典皇家科学院宣布将本年度诺贝尔物理学奖授予两位被誉为AI教父的科学家&#xff1a;约翰J霍普菲尔德&#xff08;John J. Hopfield&#xff09;和杰弗里E辛顿&#xff08;Geoffrey E. Hinton&#xff09;。该奖项旨在表彰他…

Leetcode 买卖股票的最佳时机

这段代码的目的是解决“买卖股票的最佳时机”这个问题&#xff0c;即在给定的股票价格数组中&#xff0c;找到一次买入和卖出所能获得的最大利润。 算法思想&#xff1a; 定义两个变量&#xff1a; minPrice: 这个变量用于记录迄今为止遇到的最小股票价格&#xff08;买入价格…

软件项目必须进行验收测试吗?专业验收测试报告如何获取?

软件项目验收测试是一种关键的质量保证活动&#xff0c;旨在确保软件产品符合用户需求和预期功能。它通常是在软件开发完成后&#xff0c;由客户或第三方测试机构进行的最终测试环节。验收测试的目的是确认软件的性能、功能、安全性和其他特性&#xff0c;以确保交付的产品能够…

【开源免费】基于SpringBoot+Vue.JS医院电子病历管理系统(JAVA毕业设计)

本文项目编号 T 008 &#xff0c;文末自助获取源码 \color{red}{T008&#xff0c;文末自助获取源码} T008&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 医…

5G NR UE初始接入信令流程

文章目录 5G NR UE初始接入信令流程 5G NR UE初始接入信令流程 用户设备向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU…

RK3568启动配置

硬件环境 连上电脑&#xff0c;这时候默认是uboot启动linux&#xff0c;因此我们需要进入uboot的命令行界面&#xff0c;通过网络加载oneos运行。启动后按空格&#xff1a; Rockchip watchdog timeout: 15 sec Net: eth0: ethernetfe2a0000, eth1: ethernetfe010000 Hit key…

视频去水印的3款软件:助你轻松一键去水印

在视频创作的世界里&#xff0c;水印往往是一个让人头疼的问题。无论是从网络上下载的素材&#xff0c;还是其他平台分享的视频&#xff0c;都可能带有水印&#xff0c;影响整体美观。今天&#xff0c;就为大家介绍三款视频去水印软件&#xff0c;它们分别是影忆、Online Water…

数据结构-二叉树_堆

一. 树的概念 树在我们的日常生活中随处可见&#xff0c;人们将生活中的树转换成存放数据的树形结构&#xff0c;就成了数据结构中的“树”。 如上图所示&#xff0c;自然界中的树有树根&#xff0c;有树枝&#xff0c;有树叶&#xff0c;当我们将其转换成树形结构时&#xf…

ModBus Pull的详细安装教程

目录 一.导航 二 .安装 三.激活 四.使用 一.导航 modbus poll 和 modbus slave 是两种Modbus协议的软件工具 。 Modbus Poll&#xff1a;Modbus Poll 是一个客户端&#xff08;或主站&#xff09;软件&#xff0c;它允许用户与支持Modbus协议的设备进行通信。 Modbus Sla…

英国毕业论文问卷及采访设计思路解析

在大多数情况下&#xff0c;英国毕业论文都需要学生收集一手资料。而在一手资料的收集过程中&#xff0c;学生可以通过设计试验&#xff0c;观察&#xff0c;问卷和采访等方式从目标人群或者实验人群中收集到所需的一手数据。在本文中&#xff0c;我们将针对商科和教育学之类的…

Linux——echo-tail-重定向符

echo命令 类似printf 输出 反引号 重定向符 > 和 >> > 覆盖 >> 追加 tail命令 查看文件尾部内容&#xff0c;追踪文件最新更改 tail -num 从尾部往上读num行&#xff0c;默认10行 tail -f 持续跟踪

使用 Go 语言与 Redis 构建高效缓存与消息队列系统

什么是 Redis&#xff1f; Redis 是一个开源的内存数据库&#xff0c;支持多种数据结构&#xff0c;包括字符串、列表、集合、哈希和有序集合。由于 Redis 运行在内存中&#xff0c;读写速度极快&#xff0c;常被用于构建缓存系统、实时排行榜、会话存储和消息队列等高并发场景…

论文《OneLLM:One Framework to Align All Modalities with Language》

&#xff08;没有会员只有做100个节点&#xff0c;mindmaster金主爸爸可不可以给我一个会员啊啊啊啊呜呜呜~&#xff09; 欣赏论文的图和表&#xff1a; 表中作者将自己的模型那一行选择灰色作为背景&#xff0c;更加凸显自己的数据&#xff0c;另外对于最好的结果用加粗黑体…

threads_created增加过大?

set global thread_cache_size128; 在my.cnf文件中直接加上thread_cache_size128 原值为58 MySQL中的Threads线程相关指标解读 - SRE Work mysql性能优化(thread_created) - 八戒vs - 博客园 MySQL :: MySQL 8.4 Reference Manual :: 7.1.10 Server Status Variables

基于Vue3+axios+element-plus等技术开发的新闻发布管理系统

新闻发布管理系统是一个基于Vue3piniavue-routeraxioselement-plus等开发的系统&#xff0c;主要功能包括&#xff1a;登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块&#xff08;包括基本资料、更换头像、重置密码功能&#xff09;等。 代码下载&#xf…