六、算术运算符学习笔记
2026-02-19
Python基础
type
Post
status
Published
date
Feb 19, 2026
slug
python-arithmetic-operators-notes-6
summary
算术运算符是编程中最基础也最常用的部分!刚开始我以为就是简单的加减乘除,没想到里面门道这么多——特别是
/ 和 // 的区别、浮点数精度问题、还有运算符优先级,都是容易踩坑的地方。尤其是 0.1 + 0.2 != 0.3 这个问题tags
Python数据的存储与运算
category
Python基础
icon
password
💡 学习感悟:算术运算符是编程中最基础也最常用的部分!刚开始我以为就是简单的加减乘除,没想到里面门道这么多——特别是/和//的区别、浮点数精度问题、还有运算符优先级,都是容易踩坑的地方。尤其是0.1 + 0.2 != 0.3这个问题。
1. 什么是运算符?
我的理解
程序的核心功能之一是处理数据,而运算符就是用来对数据进行操作的符号。算术运算符专门用于数学计算,让程序能够执行加减乘除等运算。
📝 我的理解:运算符就像是数学符号的编程版本——+、-、*、/这些符号和数学课上学的意思一样,但在编程里它们会告诉计算机具体怎么计算。
2. 算术运算符
2.1 基本算术运算符
运算符 | 名称 | 描述 | 示例 | 结果 |
+ | 加法 | 两数相加 | 5 + 3 | 8 |
- | 减法 | 两数相减 | 5 - 3 | 2 |
* | 乘法 | 两数相乘 | 5 * 3 | 15 |
/ | 除法 | 两数相除(结果为浮点数) | 4 / 2 | 2.0 |
📝 我的理解:Python 3 中/总是返回浮点数,即使能整除。这是为了避免整数除法带来的精度丢失问题。刚开始我还奇怪为什么10 / 2结果是5.0而不是5,现在明白了这是为了保证计算结果的一致性。
2.2 浮点数精度问题 ⚠️
为什么浮点数计算会有精度损失?
计算机底层使用二进制存储数据,而某些十进制小数(如 0.1)在二进制中是无限循环小数,无法精确表示。这导致浮点数运算可能出现微小的精度误差。
📝 我的理解:这个精度问题不是 Python 的 bug,而是计算机底层存储浮点数的原理导致的!就像 1/3 在十进制中是 0.333... 无限循环一样,0.1 在二进制中也是无限循环的,计算机只能存储近似值。
如何解决浮点数精度问题?
方法 1:使用 round() 函数四舍五入
方法 2:使用 decimal 模块(高精度计算)
方法 3:使用整数代替浮点数(货币计算)
⚠️ 踩坑记录:比较浮点数时,不要直接用==,应判断差值是否小于某个极小值!
2.3 整除运算符 //
为什么需要整除?
有时候我们只需要商的整数部分(如计算页数、分组数量),这时就需要整除。
运算符 | 名称 | 描述 | 示例 | 结果 |
// | 整除 | 两数相除,取整数部分 | 5 // 2 | 2 |
📝 我的理解://是向下取整的除法,不管小数部分是多少,都舍去取整数。负数整除时要注意,-10 // 3结果是-4而不是-3,因为是向负无穷取整。
2.4 取余运算符 %
为什么需要取余?
取余运算在编程中非常实用:判断奇偶、循环周期、时间计算等场景都需要用到。
运算符 | 名称 | 描述 | 示例 | 结果 |
% | 取余 | 两数相除,取余数 | 5 % 2 | 1 |
📝 我的理解:%取余运算符超级实用!判断奇偶是最常见的用法——num % 2 == 0就是偶数。还可以用来控制循环的周期,比如每 5 个换一行。
2.5 幂运算符 **
为什么需要幂运算?
计算平方、立方、指数增长等场景需要幂运算。
运算符 | 名称 | 描述 | 示例 | 结果 |
** | 幂运算 | 计算一个数的幂 | 2 ** 3 | 8 |
📝 我的理解:**是幂运算符,2 ** 3就是 2 的 3 次方。有趣的是,** 0.5可以开平方根!这是因为平方根就是 0.5 次方。数学知识在编程里也能用上~
3. 运算符优先级
为什么需要优先级?
当表达式中有多个运算符时,需要知道哪个先计算、哪个后计算,否则会得到错误的结果。
3.1 优先级规则(从高到低)
优先级 | 运算符 | 描述 |
1 | () | 括号(最高优先级) |
2 | ** | 幂运算 |
3 | * / // % | 乘、除、整除、取余 |
4 | + - | 加、减 |
📝 我的理解:运算符优先级和数学课上学的差不多——先乘除后加减,括号最优先。幂运算**优先级比乘除还高!不确定的时候就加括号,代码更清晰。
3.2 记忆口诀
括号 > 幂 > 乘除 > 加减
4. 复合赋值运算符
为什么需要复合赋值运算符?
当需要对变量自身进行运算时,复合赋值运算符可以让代码更简洁。
运算符 | 等价写法 | 描述 |
+= | a = a + b | 加后赋值 |
-= | a = a - b | 减后赋值 |
*= | a = a * b | 乘后赋值 |
/= | a = a / b | 除后赋值 |
//= | a = a // b | 整除后赋值 |
%= | a = a % b | 取余后赋值 |
**= | a = a ** b | 幂运算后赋值 |
📝 我的理解:复合赋值运算符就像是快捷方式——a += 5比a = a + 5少写了一个 a,看起来更简洁。在循环中累加、计数时特别方便!
5. 实际应用案例
5.1 计算器程序
📝 我的理解:这个计算器展示了所有算术运算符的用法。注意除法结果用:.2f格式化为 2 位小数,这样输出更美观。
5.2 时间转换
📝 我的理解:时间转换是//和%的经典应用场景。// 3600得到小时数,% 3600得到剩余的秒数,再// 60得到分钟数,最后% 60得到秒数。
5.3 数字拆分
📝 我的理解:数字拆分用到了整除和取余的组合。// 100得到百位,% 100去掉百位得到后两位,再// 10和% 10分别得到十位和个位。这种技巧在处理数字时很有用!
6. 遇到的问题和解决
6.1 整数除法和浮点数除法混淆
⚠️ 踩坑记录:刚开始我总是混淆/和//。记住:/总是返回浮点数,//返回整数。如果需要整数结果,一定要用//!
6.2 除零错误
⚠️ 踩坑记录:除零错误是运行时错误,程序会直接崩溃!在写除法运算前,一定要检查除数是否为 0,特别是当除数来自用户输入时。
6.3 运算符优先级错误
⚠️ 踩坑记录:计算平均值时,我一开始没加括号,结果只除了最后一个数!因为除法优先级比加法高。记住:不确定优先级时,加括号总是安全的。
6.4 浮点数直接比较
⚠️ 踩坑记录:0.1 + 0.2 != 0.3这个问题让我困惑了好久!现在我知道了,浮点数比较要用abs(a - b) < 极小值,而不是直接用==。
7. 核心知识点整理
7.1 算术运算符速查表
运算符 | 含义 | 示例 | 结果类型 |
+ | 加法 | 5 + 3 | 数字 |
- | 减法 | 5 - 3 | 数字 |
* | 乘法 | 5 * 3 | 数字 |
/ | 除法(浮点结果) | 5 / 2 | 浮点数 |
// | 整除(向下取整) | 5 // 2 | 整数 |
% | 取余 | 5 % 2 | 整数 |
** | 幂运算 | 2 ** 3 | 数字 |
7.2 运算符优先级
括号 > 幂
** > 乘除 * / // % > 加减 + -同级运算符从左到右计算。
7.3 常见错误总结
错误类型 | 错误示例 | 正确写法 |
期望整数但用 / | 10 / 3 | 10 // 3 |
除零 | 10 / 0 | 先检查 if b != 0 |
优先级错误 | 80 + 90 + 85 / 3 | (80 + 90 + 85) / 3 |
浮点数直接比较 | 0.1 + 0.2 == 0.3 | abs(a - b) < 1e-9 |
7.4 需要特别注意的
- 需要整数结果时用
//,需要浮点数结果时用/
- 比较浮点数时用
abs(a - b) < 极小值
- 不确定优先级时,加括号让代码更清晰
- 除法前先检查除数是否为 0
- 货币计算用整数(分)代替浮点数(元)
Loading...
