Python条件处理,新手入门到精通

devtools/2025/3/29 17:40:36/

Python条件处理,新手入门到精通

图片


对话实录
**小白**:(崩溃)我写了`if x = 1:`,为什么Python会报错?

**专家**:(推眼镜)**`=`是赋值,`==`才是比较**!想判断相等?用双等号!


条件判断基础内容

1. 基础 if-else

# ✅ 标准操作
x = 10
if x > 0:print("正数")
elif x < 0:print("负数")
.....  #elif可以写多个
else:print("零")

专家提醒:elif是else if的缩写,在多个条件判断时使用,当某个elif条件满足时,执行对应的代码块,之后跳过其他elif和else部分。

2.布尔值的判断

条件表达式判断的是布尔值为True或者False,可以使用函数bool()判断对象的布尔值。

#数字0的布尔值
print(bool(0))
#打印结果
False
#数字1的布尔值
print(bool(1))
#打印结果
True

一些内置对象的布尔值说明:

  • 布尔值为False: 数字0,None,False,空列表[],空字典{},空集合set(),空元组()
  • 布尔值为True: 非数字0,True,非空列表,非空字典,非空集合set(),非空元组(),自定义的类和实例

自定义的类和实例的布尔值为True:

class Fruit():def __init__(self,name,color):self.name = nameself.color = colorfruit = Fruit('apple','red')
print(f'自定义的class 布尔值为{bool(Fruit)}')
print(f'自定义的实例 布尔值为{bool(fruit)}')
#打印结果
自定义的class 布尔值为True
自定义的实例 布尔值为True

3.not 表达式表示相反逻辑

当表达式为False时,使用not+表达式,if条件判断为True,会执行代码块1

if not 表达式:代码块1

4. 嵌套条件

age = 20  
if age >= 18:if age <= 60:print("成年人")else:print("老年人")
else:print("未成年人")

嵌套条件像俄罗斯套娃,一层套一层。外层条件判断是第一层套娃,只有打开外层(满足外层条件),才会继续判断内层条件,这种结构可处理复杂的逻辑分支。

图片

5.while循环条件判断

# ✅ 标准操作
count = 0
while count < 5:print(count)count += 1

当while后面代码为True时,循环才继续。当上面的代码执行到count=5时会退出循环

6.三元运算符

# 传统写法
if x > 0:result = "正数"
else:result = "非正数"# 三元写法
result = "正数" if x > 0 else "非正数"

三元运算符用更紧凑的语法实现条件赋值,先判断x > 0,为真返回"正数",为假返回"非正数",能简化简单的条件判断逻辑。

7.短路求值

def expensive_call():  
print("我被调用了!")return True
# 短路求值
False and expensive_call() # → False(不调用函数)
True or expensive_call() # → True(不调用函数)

在逻辑运算中,and运算符当第一个操作数为False时,整个表达式结果为False,不会执行第二个操作数(即不调用expensive_call函数);or运算符当第一个操作数为True时,整个表达式结果为True,也不会执行第二个操作数,能提升程序性能,避免不必要的计算。

8.链式比较

# 传统写法
if 1 < x and x < 10:print("x在1到10之间")# 链式写法
if 1 < x < 10:print("x在1到10之间")

链式比较更简洁直观,直接表达x大于 1 且小于 10 的逻辑,与传统写法效果相同,但代码更清晰,在 Python 中这种写法合法且高效。

9.使用and 和or判断

有两个表达式A和B

A和B都为True时 A and B 结果为True
A和B有一个为False时 A and B 结果为False

A和B有一个为True时 A or B 结果为True

A和B都为False时 A or B 结果为False

10.if __name__ == '__main__'的含义

python模块(单个的.py文件是一个模块)中使用if __name__ == '__main__'时,指只有直接运行该py文件时if判断才会生效,而当该模块被其他模块import导入时则不会生效。

 定一个test.py文件,文件内容如下:
print(f'test.py的属性__name__值为: {__name__}')
if __name__ == '__main__':print('执行该内容')#运行test.py 结果:  if __name__ == '__main__'判断为True
test.py的属性__name__值为: __main__
执行该内容当test.py同级目录的另一个文件test1.py通过import导入test.py时:
test1.py文件内容如下:
import test#运行test1.py的结果:
test.py的属性__name__值为: test
解释:if __name__ == '__main__'判断为False,
因为__name__值变成了文件名test,而不再是__main__

高阶操作

1. 字典代替复杂 if-else

# 传统写法
if x == 1:result = "一"
elif x == 2:result = "二"
elif x == 3:result = "三"
else:result = "未知"
# 字典写法
result = {1: "一", 2: "二", 3: "三"}.get(x, "未知")

当有多个等值判断的if-else时,用字典的get方法可简化代码。字典将键值对存储,get方法根据键获取值,若键不存在返回默认值(这里是"未知"),代码更简洁且易读。

2. 列表推导式 + 条件

# 传统写法
result = []
for x in range(10):if x % 2 == 0:result.append(x**2)# 推导式写法
result = [x**2 for x in range(10) if x % 2 == 0]

列表推导式结合条件,能更简洁地创建列表。它先遍历range(10),对每个x判断是否满足x % 2 == 0,满足则将x**2添加到结果列表,相比传统循环,代码更紧凑。

3. any () 和 all () 函数

# 检查任意条件
if any(x > 0 for x in [-1, 2, -3]):print("至少有一个正数")
# 检查所有条件
if all(x > 0 for x in [1, 2, 3]):print("全部是正数")

any()函数检查可迭代对象中是否至少有一个元素满足条件,这里只要列表[-1, 2, -3]中有一个正数,any(x > 0 for x in [-1, 2, -3])就为True;

all()函数检查可迭代对象中所有元素是否都满足条件,列表[1, 2, 3]中所有元素都大于 0,所以all(x > 0 for x in [1, 2, 3])为True,可简化复杂的条件判断逻辑。

闭坑指南(血泪总结)

赋值陷阱:

if x = 1:  # ❌ SyntaxError  
if x == 1: # → True

在 Python 中,=是赋值运算符,==是比较运算符。条件判断时要用==,若误写为=会导致语法错误,因为条件判断需要布尔值,而x = 1是赋值操作,不是比较。

浮点精度:

if 0.1 + 0.2 == 0.3:  # → False  
if abs((0.1 + 0.2) - 0.3) < 1e-9: # → True

由于计算机对浮点数采用二进制存储和运算,存在精度问题,所以0.1 + 0.2的结果在计算机中并非精确等于0.3。通过计算差值绝对值并与极小值(如1e-9)比较,能更准确判断两个浮点数是否近似相等。

空值判断:

if x == None:  # ❌ 不推荐 
if x is None: # ✅ 推荐

在 Python 中,判断一个变量是否为None,推荐使用is关键字。is判断两个对象是否为同一对象,而==判断值是否相等。None是一个特殊的单例对象,用is更符合 Python 风格且性能稍好。

无限循环:

while True:  # ❌ 无限循环 
if condition:break # ✅ 退出循环

单纯的while True会导致无限循环,程序会一直运行下去。必须在循环体中添加break语句或更新循环条件,使其能在适当时候退出循环,否则可能导致程序卡死。

专家终极总结

  1. =是赋值,==是比较,在条件判断时务必注意运算符的正确使用。

  1. 字典可代替复杂的if-else,简化代码结构,提高代码可读性和维护性。

  1. any()和all()函数能有效简化条件判断,快速判断可迭代对象中元素是否满足特定条件。

  1. 列表推导式结合条件,让代码更简洁高效,是 Pythonic 编程的重要体现。

小白:懂了!我现在就用条件判断和循环重构代码!

专家:(竖大拇指)下次我们讲【python循环】,关注不迷路!

图片


http://www.ppmy.cn/devtools/171350.html

相关文章

2025最新版Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明

官网 https://ubuntu.com/ 下载 点击菜单 Prodercts> Ubuntu OS>Ubuntu Server 点击下载 下载后会有个弹窗 安装 选择第一个 install Ubuntu Server 直接默认&#xff0c;选择English 【默认】 选择键盘布局【默认】 选择安装配置【默认】 配置网络 我这里选择…

基于单片机的农作物自动灌溉系统

标题:基于单片机的农作物自动灌溉系统 内容:1.摘要 本研究针对传统农作物灌溉方式效率低、水资源浪费严重等问题&#xff0c;旨在设计一种基于单片机的农作物自动灌溉系统。采用土壤湿度传感器实时采集土壤湿度数据&#xff0c;将数据传输至单片机进行处理&#xff0c;单片机根…

本地部署Stable Diffusion生成爆火的AI图片

直接上代码 Mapping("/send") Post public Object send(Body String promptBody) { JSONObject postSend new JSONObject(); System.out.println(promptBody); JSONObject body JSONObject.parseObject(promptBody); List<S…

deepseek实战教程-第六篇查找源码之仓库地址与deepseek-R1、deepseek-LLM仓库内容查看

上一篇讲了支持deepseek的模型应用的本地安装和部署以及使用。再上一篇讲解了deepseek提供的开放api,便于开发者基于deepseek提供的接口来编写属于自己的业务应用程序。但是前面几篇我们都是在用模型,我们知道deepseek是开源的,那么deepseek的源码在哪里,具体源码是什么样的…

2.Excel :快速填充和拆分重组

一 案例1&#xff1a;快速填充 电子邮件中包含每个人的人名&#xff0c;现在要提取电子邮件中的姓名到名字列。 方法1&#xff1a;将 Nancy 复制到单元格后&#xff0c;邮件会高亮&#xff0c;然后输入A的时候系统就会知道提取名字了。 补充&#xff1a;如果第三个位置输入错误…

PHP大马的使用

BestShell/best_php_shell.php at master Kevil-hui/BestShell 这里用到的是这位师傅的大马&#xff08;主要是从头开始写一个大马实在太麻烦了&#xff09; 用pikachu靶场进行上传的测试 在这里传马&#xff0c;这个是简单的前端校验&#xff0c;bp抓包改后缀就好了 上传成…

VLM 系列——Qwen2.5 VL——论文解读

官方新特性 1)万物识别 大幅扩大了可识别的图像类别量级:不仅包括植物、动物、著名山川的地标,还包括影视作品中的 IP,以及各种各样的商品。 2)视觉定位 Qwen2.5-VL 可以通过生成 bounding boxes 或者 points 来准确定位图像中的物体,并能够为坐标和属性提供稳定的 J…

Python----计算机视觉处理(Opencv:边缘填充方式)

如上图所示&#xff0c;左图在逆时针旋转45度之后原图的四个顶点在右图中已经看不到了&#xff0c;同时&#xff0c;右图的四个顶点 区域其实是什么都没有的&#xff0c;因此我们需要对空出来的区域进行一个填充。右图就是对空出来的区域进行 了像素值为&#xff08;0&#xff…