Python 数字类型
在日常生活中,经常会用到数字,例如:商品数量、考试成绩、账户余额和运行时间都需要用数字表示。
计算一笔订单需要知道商品单价和购买数量:
price = 12.5
quantity = 4
total = price * quantity
print("订单金额:", total)运行结果:
订单金额: 50.0这段代码中,quantity 保存整数,price 和 total 保存小数。它们对应 Python 中最常用的两种数字类型:int 和 float。
数字类型与类型转换
int 与 float
int:整数
int 是 integer 的缩写,表示没有小数部分的整数。
student_count = 45
temperature = -3
zero = 0
print(type(student_count))
print(type(temperature))
print(type(zero))运行结果:
<class 'int'>
<class 'int'>
<class 'int'>type() 用于查看数据类型。正整数、负整数和 0 都属于 int。
Python 的整数没有固定的位数限制,只要计算机内存允许,就可以表示很大的整数。
float:浮点数
float 表示带小数的数字,也叫浮点数。
price = 12.5
height = 1.75
temperature = -3.0
print(type(price))
print(type(height))
print(type(temperature))运行结果:
<class 'float'>
<class 'float'>
<class 'float'>即使小数部分是 0,3.0 仍然是 float,不是 int。
类型由写法和值决定
变量名不会决定数据类型。下面两个变量虽然名字不同,但保存的值都是整数:
age = 18
price = 20
print(type(age))
print(type(price))程序接收到的数据不一定正好是需要的类型。Python 可以使用 int() 和 float() 主动转换。
int() 与 float()
转换为整数
number = int("18")
price = int(12.9)
print(number)
print(price)
print(type(number))运行结果:
18
12
<class 'int'>int(12.9) 会直接去掉小数部分,结果是 12,它不是四舍五入。对于负数,转换同样是向 0 的方向截断:
print(int(-12.9))运行结果:
-12转换为浮点数
score = float("95.5")
quantity = float(3)
print(score)
print(quantity)
print(type(score))运行结果:
95.5
3.0
<class 'float'>input() 数据转换
上一节学过,input() 得到的内容都是字符串。要参与数字计算,需要先转换类型。
quantity_text = input("请输入购买数量:")
quantity = int(quantity_text)
print("购买数量:", quantity)
print("数据类型:", type(quantity))也可以把输入和转换写在一起:
quantity = int(input("请输入购买数量:"))
price = float(input("请输入商品单价:"))
print("商品总价:", quantity * price)输入内容必须能够转换
int("18") 可以成功,但 int("18.5") 和 int("十八") 都会出现 ValueError。
如果需要把小数字符串转换成整数,可以分两步转换:
number = int(float("18.5"))
print(number)结果是 18。异常处理会在后面的课程中专门讲解。
数字运算
算术运算符
整数和浮点数可以进行加、减、乘、除等计算。
| 运算符 | 作用 | 示例 | 结果 |
|---|---|---|---|
+ | 加法 | 10 + 20 | 30 |
- | 减法 | 10 - 20 | -10 |
* | 乘法 | 10 * 20 | 200 |
/ | 除法 | 10 / 20 | 0.5 |
// | 向下取整除法 | 9 // 2 | 4 |
% | 取余数 | 9 % 2 | 1 |
** | 幂运算 | 2 ** 3 | 8 |
下面的代码可以直接观察每种运算的结果:
number_a = 9
number_b = 2
print("加法:", number_a + number_b)
print("减法:", number_a - number_b)
print("乘法:", number_a * number_b)
print("除法:", number_a / number_b)
print("取整除:", number_a // number_b)
print("取余数:", number_a % number_b)
print("幂运算:", number_a ** number_b)除法、整除与取余
这三个运算符都和除法有关,但得到的内容不同:
print(9 / 2)
print(9 // 2)
print(9 % 2)运行结果:
4.5
4
1/得到普通除法结果,并且结果是float//得到向下取整后的商%得到除法的余数
“向下取整”在负数计算中尤其重要:
print(-9 // 2)结果是 -5,不是 -4。
除数不能是 0
10 / 0、10 // 0 和 10 % 0 都会出现 ZeroDivisionError。
混合运算与浮点误差
整数和浮点数可以直接参与同一次计算。结果通常会变成 float:
quantity = 3
price = 9.9
total = quantity * price
print(total)
print(type(total))运行结果:
29.700000000000003
<class 'float'>这里出现了一串额外的小数,不是代码写错了。
计算机使用二进制保存浮点数,很多十进制小数无法被精确表示,所以计算结果有时会出现很小的误差。
result = 0.1 + 0.2
print(result)
print(round(result, 2))运行结果:
0.30000000000000004
0.3这是浮点数的正常特性,不是 Python 算错了。当前阶段需要记住:
- 浮点数计算可能存在很小的误差
- 展示结果时可以根据需要使用
round() - 对金额等必须精确计算的数据,需要使用专门方案
round() 不是所有精度问题的解决方案
round() 主要用于按指定小数位返回舍入结果。它不能把浮点数变成完全精确的十进制数,部分边界值的结果也可能和直觉不同。
运算符还可以处理其他类型
部分运算符也可以处理字符串等数据。例如,上一节使用的 "-" * 20 会生成 20 个短横线。不同数据类型支持的运算不同,后面的字符串和运算符章节会继续讲解。
运算优先级
Python 的基础算术运算顺序和数学中基本一致:
- 先计算括号
()中的内容 - 再计算幂
** - 再计算乘、除、取整除和取余:
*、/、//、% - 最后计算加减:
+、-
print(2 + 3 * 5)
print((2 + 3) * 5)
print(2 * 3 + 5)
print(2 * (3 + 5))运行结果:
17
25
11
16同一优先级通常从左向右计算,但幂运算 ** 是从右向左结合。遇到复杂表达式时,不要只靠记忆,使用括号明确计算顺序。
案例:订单金额计算
现在完成开头的订单计算。需求如下:
- 输入商品单价
- 输入购买数量
- 输入优惠金额
- 计算并输出应付金额
# 接收订单数据并转换类型
price = float(input("请输入商品单价:"))
quantity = int(input("请输入购买数量:"))
discount = float(input("请输入优惠金额:"))
# 先计算商品总价,再减去优惠金额
goods_total = price * quantity
pay_amount = goods_total - discount
print("商品总价:", goods_total)
print("优惠金额:", discount)
print("应付金额:", round(pay_amount, 2))一次运行结果可能是:
请输入商品单价:12.5
请输入购买数量:4
请输入优惠金额:5
商品总价: 50.0
优惠金额: 5.0
应付金额: 45.0round(pay_amount, 2) 表示按小数点后两位进行舍入。它适合当前练习中的结果展示,但不会自动补齐末尾的 0;专业财务系统通常也不会直接使用 float 处理精确金额。
案例:三位数拆分与水仙花数验证
水仙花数是一个三位数,它每一位数字的三次幂之和等于它本身。例如:
153 = 1 ** 3 + 5 ** 3 + 3 ** 3现在验证 371 是否符合这个规则。
第一步:拆出个位
一个数字除以 10 的余数就是个位:
number = 371
ones = number % 10
print("个位:", ones)第二步:拆出十位和百位
先使用 // 去掉右侧数字,再使用 % 取出目标位置:
number = 371
ones = number % 10
tens = number // 10 % 10
hundreds = number // 100
print("百位:", hundreds)
print("十位:", tens)
print("个位:", ones)运行结果:
百位: 3
十位: 7
个位: 1第三步:计算三次幂之和
number = 371
ones = number % 10
tens = number // 10 % 10
hundreds = number // 100
digit_cube_sum = hundreds ** 3 + tens ** 3 + ones ** 3
print("原数字:", number)
print("三次幂之和:", digit_cube_sum)
print("是否相等:", number == digit_cube_sum)运行结果:
原数字: 371
三次幂之和: 371
是否相等: True== 用于比较两个值是否相等,结果 True 表示条件成立。布尔值和比较运算符会在后面的章节中详细讲解,这里先用它完成验证。
幂运算使用 **
数学中常写成 3³,但 Python 使用 3 ** 3 表示三次幂。^ 在 Python 中不是幂运算符。
动手练习
练习一:计算长方形面积
输入长方形的长和宽,计算并输出面积。长和宽允许输入小数。
练习二:拆分三位数
把 583 的百位、十位和个位分别保存到变量中,再输出结果。
预期结果:
百位: 5
十位: 8
个位: 3练习三:修改水仙花数
把案例中的 371 分别改成 153 和 123,观察最后输出的 True 或 False。
小结
本节课最核心的是掌握 5 件事:
int表示整数,float表示浮点数int()和float()可以转换数据类型input()的结果需要转换后才能进行数字计算/、//和%分别得到除法结果、向下取整的商和余数- 浮点数可能存在微小误差,展示时可以按需要使用
round()