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

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

图片

相关文章:

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

Python条件处理&#xff0c;新手入门到精通 对话实录 **小白**&#xff1a;&#xff08;崩溃&#xff09;我写了if x 1:&#xff0c;为什么Python会报错&#xff1f; **专家**&#xff1a;&#xff08;推眼镜&#xff09;**是赋值&#xff0c;才是比较**&#xff01;想判断相…...

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

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

Spring 源码硬核解析系列专题(三十二):Spring Cloud LoadBalancer 的负载均衡源码解析

在前几期中,我们从 Spring 核心到 Spring Boot 的多个模块,再到 Spring Cloud Alibaba,逐步揭示了 Spring 生态在微服务领域的广泛应用。Spring Cloud LoadBalancer 是 Spring Cloud 提供的客户端负载均衡组件,替代 Ribbon,支持服务发现和负载均衡策略。本篇将深入 Spring…...

生成式媒介革命已至,搜索如何借力DeepSeek破局?

作为前沿AI技术的代表&#xff0c;DeepSeek不仅突破了传统大模型的算力瓶颈&#xff0c;更以“高性能低成本开源生态”的特性&#xff0c;重塑传播生态。对于搜索行业从业者而言&#xff0c;这场技术变革既是机遇&#xff0c;也是挑战。 DeepSeek的三大“杀手锏”&#xff0c;…...

【Vue3入门1】02- Vue3的基本操作(上)

本文介绍vue3中的一些方法的操作。 目录 1. 绑定事件 v-on 2. 按键修饰符 3. 显示和隐藏 v-show 4. 条件渲染 v-if 5. 条件渲染if-else 1. 绑定事件 v-on 点击事件 v-on:click" 发生事件 " <body><div id"app">{{ msg }} <h2&g…...

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

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

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

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

Browserlist 使用指南:应对浏览器兼容性问题的解决方案

前言 在前端开发中&#xff0c;我们经常需要处理各种不同的浏览器兼容性问题。每个浏览器的版本众多&#xff0c;处理这些问题可能会让人感到头疼。幸运的是&#xff0c;有一个名为 Browserlist 的工具可以大大简化这项工作。本文将介绍 Browserlist 的作用和使用方法&#xf…...

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.删除单一…...

Unity射击游戏手榴弹笔记

数据 在物品系统增加一个新的物品类&#xff0c;手榴弹类&#xff0c;定义手榴弹依附物体的类、配表数据类、背包内物品数据类、新建配表、在背包增加手榴弹数组&#xff1b;手榴弹的预制体需要可拾取的、扔出的&#xff1b;背包界面增加背包内的手榴弹、场景里的手榴弹、别人…...

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…...

SingleMod

SingleMod SingleMod是一种深度学习模型,专为利用纳米孔直接RNA测序(DRS)数据在单RNA分子中精确检测m6A修饰而设计。该模型通过深度多实例回归框架进行训练,能够充分利用广泛的甲基化率标签。SingleMod是一个通用框架,可轻松适配其他核酸修饰的检测模型训练。 注意: Si…...

[网鼎杯 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;函数调用&…...

航班时间 | 第九届蓝桥杯省赛C++A组

小 h 前往美国参加了蓝桥杯国际赛。 小 h 的女朋友发现小 h 上午十点出发&#xff0c;上午十二点到达美国&#xff0c;于是感叹到“现在飞机飞得真快&#xff0c;两小时就能到美国了”。 小 hh 对超音速飞行感到十分恐惧。 仔细观察后发现飞机的起降时间都是当地时间。 由于…...

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

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

编程实现自我指涉(self-reference)

从计算机的组成原理出发&#xff0c;编程实现自我指涉&#xff08;self-reference&#xff09;本质上是通过代码操纵代码&#xff0c;形成逻辑上的闭环。这种能力不仅是编程语言设计中的一个奇妙现象&#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 的首页,持续学…...

【单元测试】

一、框架 不同的编程语言有不同的测试框架&#xff0c;以下是一些常见的测试框架&#xff1a; 1&#xff09;Java&#xff1a;JUnit、TestNG2&#xff09;Python&#xff1a;unittest、pytest3&#xff09;JavaScript&#xff1a;Jest、Mocha4&#xff09;C#&#xff1a;NUni…...

【今日EDA行业分析】2025年3月24日

今日 EDA 行业分析&#xff1a;中国在全球格局下的奋进之路 一、引言 在半导体产业的精密体系中&#xff0c;EDA 软件宛如一颗璀璨的明珠&#xff0c;其重要性不言而喻。它不仅是集成电路设计的核心支撑&#xff0c;更是连接芯片设计、制造、封装与测试各环节的关键纽带。今天…...

基于 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. 在您的开发环境…...

内核编程十二:打印内核态进程的属性

在Linux内核中&#xff0c;current 是一个宏&#xff0c;用于获取当前正在执行的进程的 task_struct 结构体指针。current 宏返回一个指向当前正在运行的进程的 task_struct 结构体的指针。通过这个指针&#xff0c;内核代码可以访问和修改当前进程的各种属性和状态。 打印单个…...

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

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

[新闻.AI]国产大模型新突破:阿里开源 Qwen2.5-VL-32B 与 DeepSeek 升级 V3 模型

&#xff08;本文借助 Deepseek-R1 协助生成&#xff09; 在2025年3月24日至25日的短短24小时内&#xff0c;中国AI领域迎来两大重磅开源更新&#xff1a;阿里通义千问团队发布多模态大模型Qwen2.5-VL-32B-Instruct&#xff0c;而DeepSeek则推出编程能力大幅提升的DeepSeek-V3…...

投sci论文自己查重方法

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