Python模块:内置模块math数学运算全解
Python模块:内置模块math数学运算全解
一、开篇:Python的数学工具箱
math模块是Python最基础的内置模块之一,提供了C标准库中定义的数学函数。从三角函数到对数,从取整到阶乘,它涵盖了日常和科学计算中的大部分需求。
⌨️ 导入和使用:
importmath# math模块提供:# - 数学常量:pi, e, tau, inf, nan# - 数值运算:取整、绝对值、阶乘、组合数# - 幂和对数:sqrt, pow, exp, log, log2, log10# - 三角函数:sin, cos, tan 及其反函数# - 特殊函数:gcd, lcm, erf, gamma# - 角度转换:degrees, radians二、数学常量
importmath# 圆周率 πprint(f"π ={math.pi}")# 3.141592653589793print(f"π/2 ={math.pi/2}")# 1.5707963267948966# 自然常数 eprint(f"e ={math.e}")# 2.718281828459045# 圆的周长与面积r=5circumference=2*math.pi*r area=math.pi*r**2print(f"半径{r}的圆: 周长={circumference:.2f}, 面积={area:.2f}")# τ (tau) = 2π —— Python 3.6+print(f"τ ={math.tau}")# 6.283185307179586# 无穷大和非数字print(f"无穷大:{math.inf}")# infprint(f"负无穷:{-math.inf}")# -infprint(f"非数字:{math.nan}")# nan# 判断特殊值print(math.isinf(math.inf))# Trueprint(math.isnan(math.nan))# Trueprint(math.isfinite(1.0))# Trueprint(math.isfinite(math.inf))# False# 验证计算print(1/math.inf)# 0.0print(math.inf>999999999)# Trueprint(math.nan==math.nan)# False! nan不等于任何值,包括自己三、数值运算
3.1 取整和截断
importmath# ceil(x) —— 向上取整(往正无穷方向)print(f"ceil(3.2) ={math.ceil(3.2)}")# 4print(f"ceil(3.9) ={math.ceil(3.9)}")# 4print(f"ceil(-3.2) ={math.ceil(-3.2)}")# -3# floor(x) —— 向下取整(往负无穷方向)print(f"floor(3.2) ={math.floor(3.2)}")# 3print(f"floor(3.9) ={math.floor(3.9)}")# 3print(f"floor(-3.2) ={math.floor(-3.2)}")# -4# trunc(x) —— 截断小数部分(往0方向)print(f"trunc(3.7) ={math.trunc(3.7)}")# 3print(f"trunc(-3.7) ={math.trunc(-3.7)}")# -3# 💡 ceil vs floor vs trunc vs round 对比x=-3.7print(f"x={x}: ceil={math.ceil(x)}, floor={math.floor(x)}, "f"trunc={math.trunc(x)}, round={round(x)}")# x=-3.7: ceil=-3, floor=-4, trunc=-3, round=-4# fabs(x) —— 绝对值(返回float)print(f"fabs(-5.5) ={math.fabs(-5.5)}")# 5.5# fmod(x, y) —— 浮点数取余(不同于%)print(f"fmod(7.5, 2.0) ={math.fmod(7.5,2.0)}")# 1.53.2 阶乘和组合数
importmath# factorial(n) —— n的阶乘(n >= 0)forninrange(6):print(f"{n}! ={math.factorial(n)}")# 0! = 1 1! = 1 2! = 2 3! = 6 4! = 24 5! = 120# comb(n, k) —— 组合数 C(n,k),从n个中选k个print(f"C(5,2) ={math.comb(5,2)}")# 10# 验证:C(5,2) = 5!/(2!*3!) = 120/(2*6) = 10# perm(n, k) —— 排列数 P(n,k),从n个中选k个并排序print(f"P(5,2) ={math.perm(5,2)}")# 20# 验证:P(5,2) = 5*4 = 20# 实际应用:计算中奖概率deflottery_probability(total,choose):"""从total个号中选choose个,全中的概率"""return1/math.comb(total,choose)print(f"双色球红球中奖概率: 1/{math.comb(33,6)}")# 双色球红球中奖概率: 1/17721088四、幂和对数
importmath# sqrt(x) —— 平方根print(f"sqrt(16) ={math.sqrt(16)}")# 4.0print(f"sqrt(2) ={math.sqrt(2):.10f}")# 1.4142135624# pow(x, y) —— x的y次方print(f"pow(2, 10) ={math.pow(2,10)}")# 1024.0# exp(x) —— e的x次方print(f"exp(1) ={math.exp(1):.6f}")# 2.718282print(f"exp(2) ={math.exp(2):.6f}")# 7.389056# 对数# log(x) —— 自然对数(以e为底)print(f"log(e) ={math.log(math.e)}")# 1.0# log2(x) —— 以2为底print(f"log2(8) ={math.log2(8)}")# 3.0# log10(x) —— 以10为底print(f"log10(1000) ={math.log10(1000)}")# 3.0# log(x, base) —— 以base为底的对数print(f"log(8, 2) ={math.log(8,2)}")# 3.0print(f"log(100, 10) ={math.log(100,10)}")# 2.0# 实用函数:计算信息熵(比特)defentropy_bits(probabilities):"""计算以2为底的熵"""return-sum(p*math.log2(p)forpinprobabilitiesifp>0)五、三角函数
importmath# 基本三角函数(参数是弧度)angle=math.pi/4# 45度print(f"sin(45°) ={math.sin(angle):.6f}")# 0.707107print(f"cos(45°) ={math.cos(angle):.6f}")# 0.707107print(f"tan(45°) ={math.tan(angle):.6f}")# 1.000000# 反三角函数x=0.5print(f"asin(0.5) ={math.asin(x):.6f}rad ={math.degrees(math.asin(x)):.1f}°")# asin(0.5) = 0.523599 rad = 30.0°# atan2(y, x) —— 计算角度(考虑象限)print(f"atan2(1, 1) ={math.atan2(1,1):.6f}rad")# 45°print(f"atan2(1, -1) ={math.atan2(1,-1):.6f}rad")# 135°print(f"atan2(-1, -1) ={math.atan2(-1,-1):.6f}rad")# -135°# 角度弧度转换print(f"180° ={math.radians(180):.6f}rad")# 3.141593print(f"π rad ={math.degrees(math.pi):.1f}°")# 180.0°# 计算两点距离defdistance(x1,y1,x2,y2):"""计算两点之间的欧几里得距离"""returnmath.sqrt((x2-x1)**2+(y2-y1)**2)print(f"距离:{distance(0,0,3,4)}")# 5.0六、特殊函数
importmath# gcd(a, b) —— 最大公约数print(f"gcd(48, 18) ={math.gcd(48,18)}")# 6print(f"gcd(17, 31) ={math.gcd(17,31)}")# 1(互质)# lcm(a, b) —— 最小公倍数(Python 3.9+)print(f"lcm(4, 6) ={math.lcm(4,6)}")# 12print(f"lcm(12, 18) ={math.lcm(12,18)}")# 36# 应用:分数化简defsimplify_fraction(num,den):"""化简分数"""g=math.gcd(num,den)returnnum//g,den//gprint(f"24/36 化简:{simplify_fraction(24,36)}")# (2, 3)# 判断是否为完全平方数defis_perfect_square(n):returnn>=0andmath.isqrt(n)**2==nprint(is_perfect_square(25))# Trueprint(is_perfect_square(26))# False# isclose —— 判断两个数是否接近print(math.isclose(0.1+0.2,0.3))# Trueprint(0.1+0.2==0.3)# False! 浮点精度问题七、总结
math模块是Python数学运算的基石。掌握它让你能高效处理日常和科学计算。
💡最常用Top 10:pi,e,sqrt(),ceil(),floor(),factorial(),gcd(),sin()/cos(),radians()/degrees(),isclose()
✅需要三角函数→math,需要随机数→random,需要日期时间→datetime。math是纯数学,不涉及概率或日期。
