Python算术赋值比较逻辑运算符详解与常见错误排查
背景与范围Python 基础数据类型之后,实际开发中要对数据做计算、判断和赋值,就会频繁使用运算符。原文把 Python 内置运算符分为算术、赋值、比较、逻辑、位、成员、身份 7 类,本文只整理前四类常用运算符:算术、赋值、比较和逻辑。运算符是完成变量、数值运算的专用符号;操作数是参与运算的数据;表达式由操作数与运算符组合而成,例如 a + b 中 + 是运算符,a、b 是操作数。
一、算术运算符
算术运算符用于数字类型的数学运算,包括四则运算、整除、取余和幂运算。以 a=10、b=3 为例:+ 返回 13,- 返回 7,* 返回 30,/ 返回 3.3333333333333335,// 返回 3,% 返回 1,** 用于幂运算,a ** 2 返回 100。
a = 10
b = 3
print(a / b) # 3.3333333333333335
print(a // b) # 地板除向下取整:3
print(a % b) # 取余数:1
print(2 ** 5) # 2的5次方:32
高频注意事项:
1. 浮点除法禁止除数为 0。分母为数字 0 会直接抛出 ZeroDivisionError,程序终止。异常是编程语言内置机制,表示程序运行时出现非法意外,无法继续向下执行。
2. Python3 中两个整数使用 / 运算,结果仍为浮点数,不会截断小数。例如 print(1 / 2) 得到 0.5,使用 f'{1 / 2:.3f}' 可格式化保留 3 位小数,输出 0.500。
3. % 只代表取余,不是百分号。原理和小学除法取余一致,7 % 2 返回 1。
4. 幂运算支持整数和小数次方。4 ** 2 返回 16,4 ** 0.5 返回 2.0,即开平方根。
5. 地板除 // 是向下取整,不是四舍五入。正数运算直观,负数会向下取更小整数,例如 7 // 2 返回 3,-7 // 2 返回 -4。
二、赋值运算符
赋值运算符的核心作用是把运算结果直接赋给变量。基础写法是 =,复合赋值包括 +=、-=、*=、/=、//=、%=、**=,它们分别等价于 a = a + b、a = a - b、a = a * b、a = a / b、a = a // b、a = a % b、a = a ** b。
num = 6
num += 4 # 等价 num = num + 4
print(num) # 输出 10
Python 不存在 ++、-- 自增自减运算符,如需增减 1,只能使用 num += 1、num -= 1 替代。
特殊用法一:连续赋值。多个变量可以绑定同一个值,从右向左依次赋值。
a = b = 10
print(f'a = {a}, b = {b}') # 输出:a = 10, b = 10
特殊用法二:多元解包赋值。多个变量可同时赋值,一对一匹配。经典用途是无需中间变量交换两个变量值。
a, b = 10, 20
print(f'a = {a}, b = {b}') # 输出:a = 10, b = 20
num1, num2 = 10, 20
num1, num2 = num2, num1
print(num1, num2) # 输出 20 10
特殊用法三:+= 支持字符串、列表拼接。字符串和列表可以通过 += 完成拼接或合并,但字符串不支持 -= 等其他复合赋值。
s = 'hello'
s += ' python'
print(s) # hello python
lst =
lst +=
print(lst) #
赋值常见错误:
1. 区分赋值 = 和相等判断 ==。= 是把右侧值赋予左侧变量,== 是比较左右两边值是否相等。
a = 5 # 赋值
if a == 5: # 判断是否相等
pass
2. /= 会自动把变量转为浮点类型,//= 则保留整型。
n = 10
n /= 2
print(type(n)) # <class 'float'>
m = 10
m //= 2
print(type(m)) # <class 'int'>
3. 复合赋值运算符不可加空格拆分。a + = 2 属于非法语法,必须紧贴书写 a += 2。
三、比较运算符
比较运算符用于判断两个数据的大小、相等关系,运算结果固定为布尔值 True 或 False,多用于 if 判断和循环条件。常见运算符包括 >、<、>=、<=、==、!=。
print(10 > 5) # True
print(3 == 3.0) # True
print('abc' == 'def') # False
不同数据类型的比较规则:
1. 数字类型 int / float 直接对比数值大小,整数与等值浮点数判定相等。例如 3.5 > 2 返回 True,2.0 == 2 返回 True。
2. 字符串按 ASCII 码字典序逐字符对比。从第一个字符开始比较编码值,第一个不相等的字符直接决定整体结果,后续字符不再校验,并且区分大小写。例如 'apple' < 'banana' 返回 True,'9' > '88' 返回 True,因为首字符 9 的编码大于 8。
3. 列表、元组等序列逐元素依次对比,匹配规则和字符串字典序一致。例如 > 返回 True,(2,5) < (3,1) 返回 True。
4. Python3 禁止跨大类类型直接比较,数字与字符串、列表互相比较会直接报错。例如 print(5 > '3') 会抛出 TypeError。
Python 独有链式连续比较:常规多条件判断需要 and 连接,Python 支持直接连续拼接,两者完全等价。
x = 5
print(x > 1 and x < 10)
print(1 < x < 10) # True
浮点数易错点:计算机底层存储浮点数存在精度丢失,简单运算后可能产生极小误差,直接用 == 判定相等会出错。
a = 0.1
b = 0.2
print(f'a = {a}')
print(f'b = {b}')
print(f'a + b = {a + b}')
print(a == 0.3) # False,精度丢失导致判断错误
正确解决方案是设置误差阈值,判断两个浮点数的差值绝对值是否小于阈值。
a = 0.1 + 0.2
b = 0.3
eps = 1e-6 # 误差允许范围 0.000001
print(abs(a - b) < eps) # True
四、逻辑运算符
逻辑运算符用于联合多个布尔条件,多用于多分支和复合条件判断,共 and、or、not 三种。and 是逻辑与,两边全部为 True,结果才为 True,一假即假;or 是逻辑或,任意一边为 True,结果即为 True,一真即真;not 是逻辑非,属于单目运算符,对条件取反。
print(3 > 1 and 5 < 10) # True
print(2 > 5 and 4 < 6) # False
print(2 > 5 or 4 < 6) # True
print(10 < 2 or 3 > 8) # False
print(not 5 > 2) # False
print(not 3 < 1) # True
核心特性是逻辑短路。a and b 中,若 a 为假,直接返回 a,不执行 b;a or b 中,若 a 为真,直接返回 a,不执行 b。利用短路可以避免执行后方表达式,也能优化运行效率。
0 and print('不会执行这句')
1 or print('不会执行这句')
运算优先级从高到低为:not > and > or。复杂条件建议用括号 () 手动划分运算顺序,提升可读性。
print(True or False and not True) # True
全文总结
算术运算符负责数值数学运算,重点区分 /、//、% 三者差异,并警惕除数为 0 异常、负数取整规则和浮点数精度特性。赋值运算符用于变量赋值和复合赋值,需掌握连续赋值、多元解包交换变量等写法,明确区分 = 与 ==,注意 /= 会隐式改变变量数据类型。比较运算符结果固定为布尔值,不同数据类型对比规则不同,Python 支持链式比较简化多区间判断,浮点数不应直接用 == 判等,应通过误差阈值实现可靠判断。逻辑运算符用于组合多个判断条件,优先级遵循 not > and > or,核心特性是逻辑短路,满足判定条件后不再执行后续表达式。
Re: Python算术赋值比较逻辑运算符详解与常见错误排查
整理得很细,适合当复习提纲。算术这块把 /、 的区别讲清楚了,尤其是负数地板除是向下取整,不是四舍五入,这个点很容易踩坑。赋值部分把 = 和 ==、复合赋值的类型变化、连续赋值和多元解包都覆盖到了,交换变量那段也很实用。比较运算符里浮点数直接用 == 判断的坑写得很明白,用 eps 阈值来比较确实更稳,链式连续比较也很方便。逻辑运算符部分刚开头,期待后面把 and、or、not 的用法和注意点补完整。整体看下来,常见错误排查对新手帮助很大。Re: Python算术赋值比较逻辑运算符详解与常见错误排查
楼主整理得挺细的,算术、赋值、比较这几块常见坑基本都覆盖到了,对刚开始写 Python 的人很友好。像 / 在 Python3 返回浮点数、// 是向下取整而不是四舍五入、% 是取余不是百分号,这几个点确实容易混。赋值那块把 = 和 == 分开讲也很关键,连续赋值、多元解包交换变量、+= 拼字符串和列表,都是平时会反复用到的写法。比较运算符里链式连续比较和浮点数用 abs(a-b)Re: Python算术赋值比较逻辑运算符详解与常见错误排查
整理得挺清楚,适合当速查笔记。算术部分把 / 和 // 的区别、负数地板除向下取整、% 是取余、** 能做幂和开平方都讲到了,尤其 ZeroDivisionError 和浮点精度这两个坑,新手很容易中。赋值部分连续赋值、多元解包交换变量、+= 拼接字符串和列表都很实用,= 和 == 的区分以及复合赋值不能拆空格也提醒得很到位。比较运算里跨类型比较会报 TypeError、链式连续比较、浮点数用误差阈值判断,都是排查问题时很关键的点。逻辑运算符刚讲到 and 的一假即假,后面 or 和 not 如果继续补上,整体就更完整了。感谢分享,收藏了。
页:
[1]