一、math模块

math模块就像是一位数学大师,擅长处理整数和浮点数运算,但对于复数类型却有点不擅长,就像大厨擅长炒菜煮饭,却不太擅长做甜点一样。所以,如果你需要处理复数,可能需要找其他的数学库来帮忙啦!

import math

1、数学常数

常数

说明

实例

math.pi

圆周率 π

>>> math.pi 输出结果:3.141592653589793

math.e

自然常数e

>>> math.e 输出结果:2.718281828459045

math.inf

正无穷大,负无穷大为:-math.inf

>>> math.inf 输出结果:inf

math.nan

非浮点数标记,NaN

>>> math.nan 输出结果:nan

2、常用函数

math.ceil(浮点数)

这个函数就像是一个上升机,把小数往上推,直到它变成整数。就像是把一块巧克力蛋糕切成小块,math.ceil()会把最后一块切得更大一些。所以,如果你想要一个比较大的整数,就用这个函数吧!

>>> import math
>>> math.ceil(13.14)
14
>>> math.ceil(9.9)
10
>>> math.ceil(19) # 整数无效
19

math.floor(浮点数)

就像是给浮点数穿上了一双"向下滑行"的滑板鞋,它会直接滑行到比它小的整数位置。返回值就像是滑板鞋的轨迹一样,是一个整数。

>>> import math
>>> math.floor(13.14)
13
>>> math.floor(9.9)
9
>>> math.floor(19) # 整数无效
19

round(浮点数)

想象一下,round()就像是一个精密的数学工具,可以帮助你把一个浮点数像是把一个气球一样吹到最接近的整数。它会把小数部分“吹走”,只留下整数部分,让你的数字更加整洁。就像是把一杯咖啡的奶泡吹平,让表面光滑无暇一样。

>>> import math
>>> round(13.14)
13
>>> round(9.9)
10
>>> round(11.936, 2) # 保留两位小数的方式
11.94
>>> round(9) # 整数无效
9

math.fabs(数值)

这个函数就像是一个数值的"魔法师",它可以让任何数值变成正数,就像是把负号变成了正号一样。它的返回值是一个浮点数,就像是把一个整数变成了小数一样。

>>> import math
>>> math.fabs(-9)
9.0
>>> math.fabs(9)
9.0
>>> math.fabs(-9.9)
9.9
>>> math.fabs(9.9)
9.9

abs(数值)

这个函数就像是一个数值的“魔法师”,可以让任何数值变成正数,就像把一杯冰水变成热茶一样神奇!它会根据原数据的类型,将负数变成正数,而正数则保持不变,让你的数据变得更加正能量满满!

>>> import math
>>> abs(-9)
9
>>> abs(-9.9)
9.9

math.fmod(x, y)

这个函数就像是一位精明的数学家,帮你计算出 x/y 的余数,然后以浮点数的形式呈现给你。就像是一位算术大师,总能准确地告诉你余数是多少,让你不再为这种小问题烦恼。

>>> import math
>>> math.fmod(4, 2)
0.0
>>> math.fmod(5, 2)
1.0
>>> math.fmod(10, 3)
1.0

math.pow(底数, 幂)

这个函数就像是一个数学魔术师,可以帮你计算任何数值的N次方!它会把底数变身为幂次方,然后以浮点类型的形式呈现给你。就像是给数值戴上了魔法帽,让它们变得更加强大!

>>> import math
>>> math.pow(2,4)
16.0
>>> math.pow(3,2)
9.0
>>> math.pow(5, 3)
125.0

math.sqrt(数值)

这个函数就像是一个数学魔术师,可以帮你找到一个数的平方根!它会把你提供的数值放入魔法帽里,然后从中取出一个浮点数,就像变魔术一样神奇!

>>> import math
>>> math.sqrt(9)
3.0
>>> math.sqrt(4)
2.0
>>> math.sqrt(16)
4.0

fsum(序列)

这个函数就像是一个贪吃的小怪兽,它会把序列中的每个元素都吞下肚子,然后吐出一个浮点数作为它的成果。就像是把一大堆零食放进嘴巴,最后算出来的是你吃了多少卡路里一样!


>>> import math
>>> math.fsum((1, 2, 3, 4, 5))
15.0
>>> math.fsum(range(1,11))
55.0
>>> math.fsum(range(1,101))
5050.0

sum(序列)

就像是把一大堆糖果放进口袋里,最后算出口袋里总共有多少糖果一样,sum()函数可以把一个序列里的数值都加起来,得到一个总和。返回值就像是口袋里的糖果数量一样,是一个数值类型(具体是整数还是浮点数取决于序列中的数值类型)。就像是数学课上的加法运算一样,sum()函数可以帮助我们快速计算出序列中所有数值的总和。

>>> import math
>>> sum([1,2,3,4,5])
15
>>> sum(range(1,11)
... )
55
>>> sum([1.0,2.0,3.0,4.0,5.0])
15.0

math.modf(数值)

这个函数就像是把一块巧克力蛋糕切成两半,一半是整块的蛋糕,一半是被切成小块的蛋糕。然后把这两部分放在一个漂亮的盘子里,返回给你一个装满了整数部分和小数部分的元组。就像是一对双胞胎兄弟,一个整齐划一,一个小巧玲珑。舍去的小数部分就像是被抛弃的蛋糕渣,不过这个函数可不会浪费任何一点甜美的部分哦!


>>> import math
>>> math.modf(10.1)
(0.09999999999999964, 10.0)
>>> math.modf(9.9)
(0.9000000000000004, 9.0)
>>> math.modf(9)
(0.0, 9.0)

math.trunc(浮点数)

这个函数就像是一个数学大师,能够瞬间把一个浮点数变成整数,就像变魔术一样!它会把浮点数的小数部分全部消失,只留下整数部分,就像把一杯奶茶里的珍珠都捞出来一样。这个函数的返回值就是那个整数部分,让你轻松得到想要的结果!


>>> import math
>>> math.trunc(2.1)
2
>>> math.trunc(9.9)
9
>>> math.trunc(10.0)
10

math.copysign(值1,值2)

想象一下,就好像是在第一个数身上贴上了第二个数的正负号标签一样,这个函数会返回一个浮点数,让你的值1拥有和值2一样的正负号哦!


>>> import math
>>> math.copysign(-2, 1)
2.0
>>> math.copysign(2,-1)
-2.0

math.factorial(x)

这个函数就像是一个数学魔术师,能够将 x 变成它的阶乘!但是如果 x 不是整数或者是负数,它可不会客气,会像一位严厉的法官一样引发 ValueError。最后,它会以整数的形式将 x 的阶乘呈现给你,就像是一位忠实的仆人。

>>> import math
>>> math.factorial(4)
24
>>> math.factorial(3)
6
>>> math.factorial(1)
1

math.gcd(x, y)

这个函数就像是一位数学大侠,能够帮助你找到整数 x 和 y 之间的最大公约数。它就像是一把磨刀的石头,能够帮助你剔除整数间的杂质,让它们变得更加纯粹。这位大侠的返回值是一个整数,让你可以轻松地得到最大公约数的答案。

>>> import math
>>> math.gcd(2,4)
2
>>> math.gcd(3,9)
3
>>> math.gcd(9,6)
3

二、decimal模块

decimal 模块就像是给 Python 提供了一个“金螮克斯”(King Decimals)的装备,让你在处理浮点数时如虎添翼。相比起内置的二进制浮点数实现float,Decimal 类型就像是一位精密的算盘师傅,特别适合金融领域的应用,或者其他需要精确十进制计算的场合。控制精度、控制舍入,就像是在做法律规定的“数学游戏”,保证十进制数位的准确性,或者在用户希望计算结果与手算一致时大显身手。Decimal 就像是数学运算的“大厨”,重新演绎了手工计算的精髓,这样一来,就能确保二进制浮点数无法做到的数据精度。高精度让 Decimal 能够执行二进制浮点数无法企及的模运算和等值测试,就好像是在数学的大舞台上独领风骚。

1、什么时候使用decimal

小数相加的时候,有时候就像是在做数学题,结果总是差那么一点点,就像是你努力想算出2加2等于多少,结果却得到了5.999999999。这种烦人的问题就是由于科学计算的精度问题。所以,当你需要精确计算小数的时候,就像是要确保你的蛋糕配方中的每一滴香草精都是准确的一样,就可以考虑使用decimal这个工具啦。
33-1.png
如上:我们需要得要的值是5.03,如果需要处理这个问题的话就需要用到decimal模块了

2、使用decimal

要是想要控制小数的精度,就得像调整音量一样,用decimal.getcontext().prec = num来调整有效数字的个数。就像是调整音响的音量一样,让小数的精度清晰可辨,不要让它们变得杂音重重。

>>> import decimal

>>> decimal.getcontext().prec = 3
>>> print(decimal.Decimal(2.02) + decimal.Decimal(3.01))
5.03

>>> decimal.getcontext().prec = 2
>>> print(decimal.Decimal(2.02) + decimal.Decimal(3.01))
5.0

给数字穿上小数位数的“紧身衣”quantize() 就像是为数字戴上一顶帽子,让它们看起来更整齐,更有条理。

import decimal

print(decimal.Decimal(1.1234567890).quantize(decimal.Decimal("0.000")))  # 设置3位小数
print(decimal.Decimal(1.1234567890).quantize(decimal.Decimal("0.00")))  # 设置2位小数
print(decimal.Decimal(1.1234567890).quantize(decimal.Decimal("0.0")))  # 设置1位小数

输出结果:

1.123
1.12
1.1

至此,基础篇的所有内容已经完结。下面将进行进阶篇的内容喽,希望坚持下来的朋友能有所收获,也谢谢大家的关注。

提前剧透一下,后面会有更深度的讲解(爬虫、可视化、数据分析等),也提醒大家一下,基础篇的知识是很重要的,一定要学会弄懂,不然后面可能会看不懂。