当前位置: 首页 > news >正文

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

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 = name
        self.color = color

fruit = 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循环】,关注不迷路!

图片

相关文章:

  • 【系统架构设计师】软件质量管理
  • 常见电子元器件介绍
  • Ollama Embedding模型运行与使用
  • Bluetooth Beacons的介绍和技术实现
  • 基于动态 FOF(基金中的基金)策略的基金交易推荐系统的设计与实现思路
  • 【QT】 布局器
  • LDAP安装和基本使用
  • Android Launcher实战:完美复刻iOS风格Hotseat布局优化
  • Clio:具备锁定、用户认证和审计追踪功能的实时日志记录工具
  • Redis原理: List BRPOP分析
  • Android开发代码中设置Margin
  • Docker安装 Nacos 微服务
  • 【WebGIS教程1】WebGIS学习初步知识了解 · 概述
  • Allpaires正交表工具使用
  • Codeforces Round 1003 (Div. 4)
  • 心房颤动新机制:ATM/p53通路早期抑制
  • 最新DeepSeek-V3-0324:AI模型性能提升与新特性解析
  • Xshell远程登录腾讯云高性能应用服务
  • 2.基于多线程的TCP服务器实现
  • ASO A/B 测试:解锁数据驱动的应用商店优化
  • 想自己做网站该学些什么/怎么推广一个app
  • 电商网站建设报价单/软文推广经典案例
  • 做短租类型的网站/百度一下百度主页官网
  • wordpress页面位置/成都做整站优化
  • 迅睿cms建站/爱站网关键字挖掘
  • 真人男女直接做的视频网站/西安seo外包服务