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



运算符优先级

在 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_A para_B para_C 结果
False True False 进入上面的分支
False False True 进入上面的分支
False True True 进入上面的分支
True False False 进入下面的分支
True True True 进入下面的分支
False False False 进入下面的分支

结论

  • 进入上面的分支:当 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条件语句上向你发难,至少你也知道怎么应对

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

第一条定律

\[\text{not}(A\ or\ B) \equiv \text{not} A \ and\ \text{not} B
\]

解释:否定 A 或 B 相当于 AB 的否定相与。

第二条定律

\[\text{not}(A \ and\ B) \equiv \text{not} A \ or\ \text{not} B
\]

解释:否定 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

Python:条件分支 if 语句全讲解的更多相关文章

  1. python基础-分支判断语句(4)

    1.分支判断语句 1.单一if结构 2.if-else结构 3.if-elif-else结构 4.if嵌套结构 2.单一if结构 只有一种情况的时候 if 条件: 执行语句 说明: if后面的条件成立 ...

  2. python条件、循环语句

    既然讲到语句,那先说明一下语句块.语句块不是一种语句,是一组语句.在条件为真时执行或者多次的一组语句.主要注意其格式,用冒号来标识语句块的开始,块中每行缩进相同的量,一般4个空格(tab字符位置为8个 ...

  3. python 条件分支与循环

    一.if判断: 语法一: if 条件: # 条件成立时执行的子代码块 代码1 代码2 代码3 示例: sex='female' age=18 is_beautiful=True if sex == ' ...

  4. 条件分支SQL语句<一> Case When

    SELECT END ) AS MoneyIn, END ) AS MoneyOut, END ) AS BetMoney, END ) AS PctMoney, END ) AS WinMoney, ...

  5. Python 2.7 学习笔记 条件与循环语句

    本文介绍下python条件和循环语句的语法 一.if条件语句 语法格式如下: if 表达式: .... elif 表达式: .... elif 表达式: .... else: ..... 说明:与其它 ...

  6. Python教程(2.7)——条件分支

    像其它语言一样,Python也有条件分支. 例如,输入用户年龄,可能需要判断是否成年,并做出不同反应.这就需要用到条件分支. if条件分支 if条件分支的一般格式如下: if condition: s ...

  7. python实例 条件和循环语句

    #! /usr/bin/python #条件和循环语句 x=int(input("Please enter an integer:")) if x<0:     x=0    ...

  8. python之最强王者(3)——变量,条件、循环语句

    1.Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的 ...

  9. #7 Python顺序、条件、循环语句

    前言 上一节讲解了Python的数据类型和运算,本节将继续深入,涉及Python的语句结构,相当于Python的语法,是以后编写程序的重要基础! 一.顺序语句 顺序语句很好理解,就是按程序的顺序逻辑编 ...

  10. 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)

    一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...

随机推荐

  1. 18B20的CRC官方讲解

    理解和运用MAXIM IBUTTON产品中的循环冗余校验(CRC) 摘要 : 全部1-Wire器件,包括iButton器件,都具有唯一的8字节注册码,储存在只读存储器(ROM)中.该注册码在1-Wir ...

  2. Mysql函数1-IFNULL

    IFNULL函数用于判断参数值是null时则返回指定内容. 原本 select goods_base_name,goods_id from goods where goods_id in (6,7,8 ...

  3. Jmeter函数助手2-Random

    Random函数用于获取随机范围内的正整数或负整数. 一个范围内的最小值:必填,且必须填入整数(正负数都可以) 一个范围内允许的最大值:必填,且必须填入整数(正负数都可以).最大值需大于最小值如[-6 ...

  4. 【ActiveJdbc】02

    一.基本的数据库操作 数据模型层: import org.javalite.activejdbc.Model; 数据访问层: import org.javalite.activejdbc.Base; ...

  5. 【转载】【技术杂谈】shell和terminal

    分享视频: [技术杂谈]shell和terminal

  6. 决定了,今日起开始准备弃用京东JD

    估计京东是为了节约开支,然后开始大比例的把快递物流业务进行外包了,这直接导致服务质量的直线下滑,10多年前我选择弃用当当网而选择京东JD就是因为当时当地的当当网快递是用沈阳晚报的快递上门的,快递员连P ...

  7. A3C与GA3C的收敛性分析

    G-A3C的代码: https://gitee.com/devilmaycry812839668/gpu_a3c 论文: <Reinforcement Learning thorugh Asyn ...

  8. Python-目标检测-将xml文件转换成.txt文件

    代码说明:labels文件夹是工程下的一个文件夹,里面存放的是一些xml文件. 然后我们将这些xml文件中的内容取出来,放在路径path1的文件名下.这样也就完成了xml文件到txt文件的转化. 该代 ...

  9. 面试必问之redis

    这里是我作为10年面试经验总结的面试中必问问题 问题一 简单介绍下redis redis是当前比较热门的NOSQL系统之一,它是一个开源的使用ANSI c语言编写的key-value存储系统(区别于M ...

  10. disconf分布式配置管理(二) 与spring集成

    上一章介绍了disconf的安装预配置,这章主要介绍下disconf与spring集成 1.添加依赖 <dependency> <groupId>com.baidu.disco ...