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

news2025/4/21 8:00:25

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

图片

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

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

相关文章

JPA实体类注解缺失异常全解:从报错到防御!!!

&#x1f6a8; JPA实体类注解缺失异常全解&#xff1a;从报错到防御 &#x1f6e1;️ 一、&#x1f4a5; 问题现象速览 // 经典报错示例 Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.example.entity.Product典型症状&#xff1a; &…

【C语言】多进程/多线程

【C语言】多进程/多线程 参考链接多进程/多线程服务器1. 多进程服务器2. 多线程服务器 结语参考链接 参考链接 c 中文网 菜鸟 c 多进程/多线程服务器 多进程和多线程是常用的并发编程技术。它们都允许程序同时执行多个任务&#xff0c;提高了系统的资源利用率和程序的运行效率…

模糊数学 | 模型 / 集合 / 关系 / 矩阵

注&#xff1a;本文为来自 “模糊数学 | 模型及其应用” 相关文章合辑。 略作重排。 如有内容异常&#xff0c;请看原文。 模糊数学模型&#xff1a;隶属函数、模糊集合的表示方法、模糊关系、模糊矩阵 wamg 潇潇 于 2019-05-06 22:35:21 发布 1.1 模糊数学简介 1965 年&a…

QinQ项展 VLAN 空间

随着以太网技术在网络中的大量部署&#xff0c;利用 VLAN 对用户进行隔离和标识受到很大限制。因为 IEEE802.1Q 中定义的 VLAN Tag 域只有 12 个比特&#xff0c;仅能表示 4096 个 VLAN&#xff0c;无法满足城域以太网中标识大量用户的需求&#xff0c;于是 QinQ 技术应运而生。…

数据结构—树(java实现)

目录 一、树的基本概念1.树的术语2.常见的树结构 二、节点的定义三、有关树结构的操作1.按照数组构造平衡 二叉搜索树2.层序遍历树3.前、中、后序遍历树(1).前序遍历树(2).中序遍历树(3).后序遍历树(4).各种遍历的情况的效果对比 4.元素添加5.元素删除1.删除叶子节点2.删除单一…

S32K144外设实验(七):FTM输出多路互补带死区PWM

文章目录 1. 概述1.1 时钟系统1.2 实验目的2. 代码的配置2.1 时钟配置2.2 FTM模块配置2.3 输出引脚配置2.4 API函数调用1. 概述 互补对的PWM输出是很重要的外设功能,尤其应用再无刷电机的控制。 1.1 时钟系统 笔者再墨迹一遍时钟的设置,因为很重要。 FTM的CPU接口时钟为SY…

[网鼎杯 2020 白虎组]PicDown1 [反弹shell] [敏感文件路径] [文件描述符]

常见读取路径 /etc/passwd一些用户和权限还有一些乱七八糟的 /proc/self/cmdline包含用于开始当前进程的命令 /proc/self/cwd/app.py当前工作目录的app.py /proc/self/environ包含了可用进程的环境变量 /proc/pid/exe 包含了正在进程中运行的程序链接&#xff1b; /proc/pid…

单纯形法之大M法

1. 问题背景与标准化 在求解某些线性规划问题时&#xff0c;往往难以直接找到初始的基本可行解。特别是当约束中存在等式或 “≥” 类型的不等式时&#xff0c;我们需要引入人工变量来构造一个初始可行解。 考虑如下标准形式问题&#xff08;假设为最大化问题&#xff09;&am…

各类神经网络学习:(四)RNN 循环神经网络(下集),pytorch 版的 RNN 代码编写

上一篇下一篇RNN&#xff08;中集&#xff09;待编写 代码详解 pytorch 官网主要有两个可调用的模块&#xff0c;分别是 nn.RNNCell 和 nn.RNN &#xff0c;下面会进行详细讲解。 RNN 的同步多对多、多对一、一对多等等结构都是由这两个模块实现的&#xff0c;只需要将对输入…

DeepSeek 发布DeepSeek-V3-0324 版本 前端与网页开发能力、推理与多任务能力提升

DeepSeek 发布 DeepSeek-V3-0324 版本 DeepSeek 发布 DeepSeek-V3-0324 版本&#xff0c;在其前代模型 DeepSeek-V3 的基础上进行了显著升级。 该模型专注于中文和多语言文本生成、推理、代码编写等综合能力的提升&#xff0c;支持 Function Calling&#xff08;函数调用&…

传输层安全协议 SSL/TLS 详细介绍

传输层安全性协议TLS及其前身安全套接层SSL是一种安全传输协议&#xff0c;目前TLS协议已成为互联网上保密通信的工业标准&#xff0c;在浏览器、邮箱、即时通信、VoIP等应用程序中得到广泛的应用。本文对SSL和TLS协议进行一个详细的介绍&#xff0c;以便于大家更直观的理解和认…

CentOS8 安装 Docker-CE

如果之前安装过docker,请先卸载旧版本: yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine 安装所需的软件包: yum install -y yum-utils 添加软件源信息(设置存储库)…

【Docker系列八】使用 Docker run 命令部署 Nginx

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

基于 PHP 内置类及函数的免杀 WebShell

前言 PHP 作为广泛使用的服务端语言&#xff0c;其灵活的内置类&#xff08;如 DOMDocument&#xff09;和文件操作机制&#xff08;.ini、.inc 的自动加载&#xff09;&#xff0c;为攻击者提供了天然的隐蔽通道。通过 动态函数拼接、反射调用、加密混淆 和 伪命名空间 等手法…

鸿蒙移动应用开发--UI组件布局

实验要求&#xff1a; 制作一个B站视频卡片界面&#xff0c;大致如下图所示&#xff0c;要求应用到线性布局、层叠布局等相关课堂知识。背景图、logo及文本内容不限。 实验环境 &#xff1a;DevEco Studio 实验过程&#xff1a; 步骤1&#xff1a;创建项目 1. 在您的开发环境…

C++(16)—类和对象(下) ①再探构造函数

文章目录 一、构造函数初始化方式回顾二、初始化列表详解1. 初始化列表语法与特点2. 必须使用初始化列表的成员变量 三、初始化列表的底层机制四、最佳实践五、总结 一、构造函数初始化方式回顾 在C中&#xff0c;构造函数用于初始化对象的成员变量。传统的初始化方式是在构造…

投sci论文自己查重方法

首先进入查重网站科研者之家-Home of Reasearchers 会看到里面有很多小工具&#xff08;比较高级的是要付费的&#xff09; 我们找到论文查重的小工具&#xff1a;论文查重——>英文论文自助查重系统 把论文上传

宝塔docker flarum默认登录账号密码,crazymax/flarum镜像默认登录账号密码

docker flarum默认账号密码 刚创建完毕时的登录账号和密码都是flarum 来源说明 宝塔安装的这个1.8.5版本的docker flarum的版本是&#xff0c;用的是 Docker库 https://hub.docker.com/r/crazymax/flarum Github库 https://github.com/crazy-max/docker-flarum

电脑干货:万能驱动--EasyDrv8

目录 万能驱动EasyDrv8 功能介绍 主程序界面 驱动解压与安装 PE环境支持 系统部署环境 桌面环境一键解决方案 万能驱动8电脑版是由IT天空出品的一款智能识别电脑硬件并自动安装驱动的工具&#xff0c;一般又称为it天空万能驱动&#xff0c;万能驱动vip版&#xff0c;简称…

C++中将记录集的数据复制到Excel工作表中的CRange类CopyFromRecordset函数异常怎么捕获

文章目录 一、异常类型及捕获逻辑二、完整代码示例三、关键错误场景与解决方案1. CopyFromRecordset 返回空数据2. COM错误 0x800A03EC3. Excel进程残留4. 内存不足 四、调试与日志记录1. 启用详细日志2. 捕获错误描述3. 调试断点 五、最佳实践 在C中使用 CRange::CopyFromReco…