整数与浮点数
掌握 Python 的两种数字类型和七种算术运算
- 区分整数 int 和浮点数 float
- 掌握 +、-、*、/、//、%、** 七种运算
- 理解运算优先级和括号
两种数字类型
Python 有两种内置数字类型:整数(int)和浮点数(float)。
整数(int):没有小数点的数,可以是正数、负数或零。比如 10、-5、0、1000000。Python 的整数没有大小限制,能写非常大的数。
浮点数(float):带小数点的数。如 3.14、-2.5、1.0。注意 1.0 虽然数学上等于 1,但在 Python 中它是浮点数。
type(x) 可以查看变量 x 的类型。调试的时候很好用——拿不准一个变量是什么类型,直接用 type() 查。
七种算术运算符
整除 // 和取余 % 是初学者最容易混淆的。拿分苹果打比方:7 个苹果分给 3 个人,每人分到 2 个(//),还剩 1 个(%)。
/ 永远返回浮点数:10 / 2 = 5.0 而不是 5。// 是向下取整(不是四舍五入):7 // 3 = 2,-7 // 3 = -3(因为 -3 比 -2 更小)。
浮点数精度问题
这是所有编程语言都有的问题:浮点数在计算机中用二进制存储,有些十进制小数无法精确表示。
这不是 bug,是浮点数的特性。实际开发中比较浮点数应该用「近似相等」:
做金融、电商这类跟钱打交道的业务,绝对别用 float 存金额。0.1 + 0.2 ≠ 0.3 这种误差,算的次数多了会攒成大问题。Python 里有 decimal.Decimal 可以做精确的十进制运算,也可以用整数存「分」——比如 10.50 元就存成 1050。这是初级和高级开发者的分水岭:知道什么时候不能用 float,比会用 float 重要得多。
print(10 / 2)
print(10 // 3)
print(10 % 3)运算优先级
优先级从高到低:** > *、/、//、% > +、-。同级运算从左到右(但 ** 从右到左)。不确定时用括号,括号最优先:
print((2 + 3) * 2 ** 2)类型转换
int() 和 float() 可以在整数和浮点数之间转换:
int(3.9) 的结果是 3,不是 4!int() 直接截断小数部分。如果需要四舍五入,用 round(3.9) = 4。
10 / 3 的结果类型是什么?
为什么 0.1 + 0.2 ≠ 0.3?
这不是 Python 的 bug,而是所有使用 IEEE 754 浮点数标准的语言(Java、C++、JavaScript 等)共有的问题。
原因:计算机用二进制存小数。十进制的 0.1 转成二进制是无限循环小数 0.0001100110011...,跟十进制没法精确表示 1/3 是一个道理。计算机只能截断了存,所以 0.1 在内存里实际是 0.1000000000000000055...
解决方案:
比较浮点数用容差:abs(a - b) < 1e-9
金融场景用 decimal.Decimal(精确十进制)
用 fractions.Fraction 做精确分数运算
整数「分」方案的关键是:定价、数量、小计这些中间步骤全程用整数算,只在最后展示给用户时才除以 100,保证中途没有任何一步碰到浮点数。
print(7 / 2) 的输出是?
print(5 // 2) 的输出是?
print(2 ** 10) 的输出是?
资深工程师加餐
底层原理 · 大厂视角 · 工程经验,点卡片展开
Python 里整数、字符串甚至函数都是对象,堆在内存里;变量不是装东西的盒子,而是一张贴在对象上的「名字标签」(引用)。id(x) 看对象身份,is 比身份、== 比值。CPython 会缓存 -5~256 的小整数,所以 a=1;b=1 时 a is b 为 True,但 a=300;b=300 未必。结论:判断值是否相等永远用 ==,判断是不是 None 才用 is。
挑战任务
圆面积计算器
计算半径为 5 的圆的面积(π 取 3.14),输出结果。
课后作业
温度转换
将摄氏 37 度转为华氏度(F = C × 9/5 + 32)。