一、数字类型概述
Python中有三种数字类型:
| | | |
int | | 10 | |
float | | 3.14 | |
complex | | 3+4j | |
二、整数(int)
2.1 整数的定义
# 正整数age = 25count = 100year = 2024# 负整数temperature = -5debt = -1000# 零zero = 0# 查看类型print(type(age)) # <class 'int'>
2.2 整数的特性
特性1:无大小限制
# Python整数可以无限大(只受内存限制)big_number = 123456789012345678901234567890print(big_number) # 123456789012345678901234567890bigger = 10 ** 100# 10的100次方print(bigger) # 天文数字,照样能算
特性2:不同进制表示
# ��制(默认)a = 255# 二进制(以0b开头)b = 0b11111111# 二进制11111111 = 十进制255print(b) # 255# 八进制(以0o开头)c = 0o377# 八进制377 = 十进制255print(c) # 255# 十六进制(以0x开头)d = 0xFF# 十六进制FF = 十进制255print(d) # 255
特性3:下划线分隔(提升可读性)
# Python3.6+支持用下划线分隔数字million = 1_000_000# 100万print(million) # 1000000population = 14_000_000_000# 140亿price = 99_999.99
三、浮点数(float)
3.1 浮点数的定义
# 标准写法pi = 3.14159price = 19.99temperature = 36.5# 科学计数法avogadro = 6.02e23# 6.02 × 10^23electron = 1.6e-19# 1.6 × 10^-19# 整数点零(也是浮点数)x = 10.0y = 0.0# 查看类型print(type(pi)) # <class 'float'>
3.2 浮点数的精度问题
⚠️ 重要特性:浮点数有精度误差
# 经典问题:0.1 + 0.2 ≠ 0.3print(0.1 + 0.2) # 0.30000000000000004print(0.1 + 0.2 == 0.3) # False# 原因:计算机用二进制表示小数,无法精确表示某些十进制小数
解决方案:
# 方法1:四舍五入到指定位数result = 0.1 + 0.2print(round(result, 2)) # 0.3# 方法2:使用Decimal模块(精确计算)from decimal import Decimala = Decimal('0.1')b = Decimal('0.2')print(a + b) # 0.3print(a + b == Decimal('0.3')) # True
四、整数 vs 浮点数对比
# 类型转换x = 10y = 3.14# 整数转浮点数x_float = float(x) # 10.0# 浮点数转整数(直接截断,不四舍五入)y_int = int(y) # 3(丢掉小数部分)# 四舍五入取整z = round(3.6) # 4
五、基本运算
5.1 算术运算符
a = 15b = 4print(f"{a} + {b} = {a + b}") # 加法:19print(f"{a} - {b} = {a - b}") # 减法:11print(f"{a} * {b} = {a * b}") # 乘法:60print(f"{a} / {b} = {a / b}") # 除法:3.75(结果是浮点数)print(f"{a} // {b} = {a // b}") # 整除:3(取商的整数部分)print(f"{a} % {b} = {a % b}") # 取余:3print(f"{a} ** {b} = {a ** b}") # 幂:15^4 = 50625
5.2 运算结果类型
# 整数运算print(10 + 3) # 13 (int)print(10 - 3) # 7 (int)print(10 * 3) # 30 (int)print(10 ** 3) # 1000 (int)# 除法例外:整数相除得到浮点数print(10 / 2) # 5.0 (float) 即使能整除print(9 / 2) # 4.5 (float)# 混合运算:只要有一个浮点数,结果就是浮点数print(10 + 3.0) # 13.0 (float)print(5 * 2.5) # 12.5 (float)
5.3 增强赋值运算符
x = 10x += 3# 等价于 x = x + 3print(x) # 13x -= 5# 等价于 x = x - 5print(x) # 8x *= 2# 等价于 x = x * 2print(x) # 16x /= 4# 等价于 x = x / 4print(x) # 4.0
六、常用数学函数
6.1 内置函数
# 绝对值print(abs(-5)) # 5print(abs(3.14)) # 3.14# 四舍五入print(round(3.14159, 2)) # 3.14(保留2位小数)print(round(3.6)) # 4(取整)# 幂运算print(pow(2, 10)) # 1024(2的10次方)# 最大值/最小值print(max(10, 20, 15)) # 20print(min(10, 20, 15)) # 10# 求和numbers = [1, 2, 3, 4, 5]print(sum(numbers)) # 15
6.2 math模块
import math# 常数print(math.pi) # 3.141592653589793print(math.e) # 2.718281828459045# 向上取整/向下取整print(math.ceil(3.2)) # 4(向上取整)print(math.floor(3.8)) # 3(向下取整)print(math.trunc(3.8)) # 3(截断小数)# 平方根print(math.sqrt(16)) # 4.0# 三角函数print(math.sin(math.pi/2)) # 1.0print(math.cos(0)) # 1.0# 对数print(math.log(100, 10)) # 2.0(以10为底)print(math.log10(100)) # 2.0(常用对数)print(math.log(100)) # 约4.605(自然对数)
七、实战案例
案例1:温度转换器
"""摄氏温度(C)与华氏温度(F)转换公式:F = C * 9/5 + 32 C = (F - 32) * 5/9"""# 摄氏转华氏celsius = 25fahrenheit = celsius * 9/5 + 32print(f"{celsius}°C = {fahrenheit}°F")# 华氏转摄氏f = 77c = (f - 32) * 5 / 9print(f"{f}°F = {c:.1f}°C")# 批量转换temperatures_c = [0, 20, 30, 37, 100]for c in temperatures_c: f = c * 9/5 + 32print(f"{c:3}°C = {f:5.1f}°F")
案例2:BMI计算器
"""BMI = 体重(kg) / 身高(m)的平方"""# 输入weight = 70.5# 公斤height = 1.75# 米# 计算bmi = weight / (height ** 2)# 输出结果print(f"体重:{weight}kg")print(f"身高:{height}m")print(f"BMI:{bmi:.2f}")# 判断if bmi < 18.5:print("体重偏轻")elif bmi < 24:print("体重正常")elif bmi < 28:print("体重偏重")else:print("肥胖")
案例3:货币兑换
"""人民币(CNY)与美元(USD)兑换汇率:1 USD = 7.25 CNY(示例)"""# 汇率(常量用大写)USD_TO_CNY = 7.25# 美元转人民币usd_amount = 100cny_amount = usd_amount * USD_TO_CNYprint(f"${usd_amount} = ¥{cny_amount:.2f}")# 人民币转美元cny = 1000usd = cny / USD_TO_CNYprint(f"¥{cny} = ${usd:.2f}")# 保留2位小数,四舍五入print(f"实际支付:¥{round(cny_amount, 2)}")
案例4:平均数计算器
"""计算任意多个数的平均数"""# 方法1:固定个数scores = [85, 92, 78, 90, 88]average = sum(scores) / len(scores)print(f"成绩:{scores}")print(f"平均分:{average:.1f}")# 方法2:用户输入numbers = []print("请输入数字(输入q结束):")whileTrue: user_input = input()if user_input.lower() == 'q':breaktry: num = float(user_input) numbers.append(num)except ValueError:print("请输入有效数字!")if numbers: avg = sum(numbers) / len(numbers)print(f"您输入了{len(numbers)}个数字")print(f"总和:{sum(numbers)}")print(f"平均:{avg:.2f}")
案例5:利息计算器
"""复利计算:A = P(1 + r)^tP: 本金r: 年利率t: 年数A: 本息合计"""# 定投计算principal = 10000# 本金1万rate = 0.03# 年利率3%years = 5# 5年# 复利计算total = principal * (1 + rate) ** yearsinterest = total - principalprint(f"本金:¥{principal:,.0f}")print(f"年利率:{rate*100}%")print(f"期限:{years}年")print(f"本息合计:¥{total:,.2f}")print(f"获得利息:¥{interest:,.2f}")# 不同利率对比print("\n不同利率对比(5年期):")for r in [0.02, 0.03, 0.04, 0.05]: total = principal * (1 + r) ** yearsprint(f"利率{r*100:3.0f}%:¥{total:>10,.2f}")
八、常见问题与技巧
问题1:浮点数比较
# ❌ 不要直接比较浮点数a = 0.1 + 0.2b = 0.3print(a == b) # False# ✅ 应该比较差值epsilon = 1e-10# 很小的容差值print(abs(a - b) < epsilon) # True
问题2:整数除法陷阱
# Python 2:整数除法向下取整# Python 3:正常除法# ✅ Python3print(5 / 2) # 2.5print(5 // 2) # 2# 负数整除:向下取整print(-5 // 2) # -3(因为-2.5向下取整是-3)
问题3:大数运算性能
# 计算阶乘import mathimport time# 方法1:循环start = time.time()result1 = 1for i inrange(1, 100001): result1 *= itime1 = time.time() - start# 方法2:math模块start = time.time()result2 = math.factorial(100000)time2 = time.time() - startprint(f"循环用时:{time1:.2f}秒")print(f"内置函数用时:{time2:.2f}秒")# 内置函数优化得好,通常更快
问题4:格式化输出技巧
price = 12345.6789# 保留小数print(f"{price:.2f}") # 12345.68# 千位分隔符print(f"{price:,.2f}") # 12,345.68# 左对齐/右对齐print(f"{price:<15.2f}") # 左对齐,宽度15print(f"{price:>15.2f}") # 右对齐,宽度15print(f"{price:^15.2f}") # 居中,宽度15# 补零print(f"{price:015.2f}") # 0000012345.68
九、总结
整数(int)使用场景
- • ✅ 循环:
for i in range(10)
浮点数(float)使用场景
记忆口诀
整数浮点要分清除法返回浮点数浮点比较要容差格式化用f-stringmath模块功能强精度要求用Decimal
练习:综合应用
任务: 编写一个程序,计算圆的周长和面积
import math# 输入半径radius = float(input("请输入圆的半径:"))# 计算circumference = 2 * math.pi * radius # 周长area = math.pi * radius ** 2# 面积# 输出(保留2位小数)print(f"\n半径:{radius}")print(f"周长:{circumference:.2f}")print(f"面积:{area:.2f}")# 额外:直径diameter = 2 * radiusprint(f"直径:{diameter:.2f}")
运行示例:
请输入圆的半径:5半径:5.0周长:31.42面积:78.54直径:10.00