目录
Python数学运算
Python除支持基本的数学运算外,还提供其他语言不常见的数学特性,如分数运算和复数运算。Python的math模块包含高级运算中常见的三角函数、统计函数、对数函数等。
1.1分数
Python的模块fractions中定义了一个特殊的对象,叫做Fraction。该对象的属性包括分子和分母。一旦定义了分数对象,就可以进行各种算术运算了。
在使用了分数对象之前,需要引入fraction模块,语法如下:
from fractions import Fraction
Fraction对象有三种实例化方式:
- 两个整数作为参数,如t=Fraction(1,3)。函数中的第一个参数是分子,第二个参数是分母,表示1/3;
- 一个浮点数作为参数,如t=Fraction(3.5),表示7/2;
- 一个字符串作为参数,如t=Fraction(‘3/5’),表示3/5。
注意:
- 自动约分,如果分子、分母中有负号,将负号归于分子;
- 两个分数相加得到一个分数;一个分数加一个整数得到一个分数;一个分数加一个浮点数得到一个浮点数;其他二元运算规则同加法运算;
- 如果要获取Fraction对象属性,numerator获取分子,denominator获取分母。例如,Fraction(‘3/4’).numerator获得分子3,Fraction(‘3/4’).denominator获得分母4;
- 通过from fractions import gcd语句的导入,可以使用gcd(a,b)函数得到a和b的最大公约数。
用随机数生成两个分数,计算并输出它们的和差积商的程序如下:
#导入随机函数模块
import random
#导入分数模块
from fractions import Fraction
#生成0-100之间的随机整数
a1=random.randint(0,100)
b1=random.randint(0,100)
a2=random.randint(0,100)
b2=random.randint(0,100)
#用a1和b1构造分数
f1=Fraction(a1,b1)
f2=Fraction(a2,b2)
#输出分数的运算结果,其中{0},{1},{2}等是占位符,与format函数中的变量的位置对应,起始位置是0
print("{0}+{1}={2}\n{0}-{1}={3}\n{0}*{1}={4}\n{0}/{1}={5}\n".format(f1,f2,f1+f2,f1-f2,f1*f2,f1/f2))
运行结果为:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/ssss.py
51/98+25/23=3623/2254
51/98-25/23=-1277/2254
51/98*25/23=1275/2254
51/98/25/23=1173/2450
Process finished with exit code 0
1.2复数
Python内建函数库提供complex()函数来处理复数问题。要创建一个复数,需要制定一个实部作为参数,虚部作为第二个参数。例如t=complex(2,3)表示复数2+3j。
一旦定义了复数对象,就可以进行各种算术运算了。
注意:
- 可以将字符串形式的复数转化为复数。例如complex('2+3j')表示复数2+3j;
- 可以用real取得复数的实部,imag取得复数的虚部。例如,complex(2,3).real的运算结果为2.0,complex(2,3).imag的运算结果为3.0,得到浮点型数值;
- 可以用内置的abs函数计算复数的模,如abs(complex(2,3)),结果是3.605551275463989。
计算任意两个复数的和差积商的程序如下:
print('请输入两个复数,形式为a+bj:')
#从键盘上接收一个a+bj形式的字符串,并将其转换成复数对象
c1=complex(input('请输入第一个变量:'))
c2=complex(input('请输入第二个变量:'))
#复数的算术运算
s1=c1+c2
s2=c1-c2
s3=c1*c2
s4=c1/c2
#{5:3f}表示第5个变量的小数位数只输出3位
print("{0}+{1}={2}\n{0}-{1}={3}\n{0}*{1}={4}\n{0}/{1}={5:.3f}\n".format(c1,c2,s1,s2,s3,s4))
运行结果:
E:\PycharmProjects\PythonTest\venv\Scripts\python.exe E:/PycharmProjects/PythonTest/ssss.py
请输入两个复数,形式为a+bj:
请输入第一个变量:12+5j
请输入第二个变量:20-15j
(12+5j)+(20-15j)=(32-10j)
(12+5j)-(20-15j)=(-8+20j)
(12+5j)*(20-15j)=(315-80j)
(12+5j)/(20-15j)=0.264+0.448j
Process finished with exit code 0
1.3math模块
Python支持的一些高级数学运算功能,都可以在math模块中找到,如对数函数、三角函数、随机数函数等。使用这些函数必须引入math模块,语句为:
import math
Python中常用的数学函数主要提供如绝对值、阶乘、数字判断、对数、指数等功能,如下表所示:
函数 | 功能 | 实例 |
abs(x) | 返回数字的绝对值 | abs(-10)返回10 |
ceil(x) | 返回排在这个输入值之后的最小整数 | math.ceil(6.6)返回7 math.ceil(-6.6)返回-6 |
trunc(x) | 截断x小数点后的数字,只留下构成x整数部分的有效数字 | math.trunc(6.6)返回6 math.trunc(-6.6)返回-6 |
floor(x) | 将x转换成不大于它的最大整数 | math.floor(6.6)返回6 math.floor(-6.6)返回-7 |
exp(x) | 返回e(自然常数)的x次幂(e**x) | math.exp(1)返回2.718281828459045 |
fabs(x) | 返回x的绝对值 | math.fabs(-10)返回10 math.fabs(6.6)返回6.6 |
log(x) | 返回以e为底数的x的自然对数 | math.log(10)返回 2.302585092994046 |
log(x,y) | 返回以y为底数的x的自然对数 | math.log(27,3)返回3.0 |
log10(x) | 返回以10为底数的x的自然对数 | math.log10(1000)返回3.0 |
modf(x) | 返回一个tuple,包含x的小数和整数部分 | math.modf(6.32)返回(0.3200000000000003,6.0) |
pow(x,y) | 返回x**y的值 | math.pow(3,4)返回81.0 |
sqrt(x) | 计算x的平方根,数字不能是复数 | math.sqrt(9)返回3.0 |
max(x1,x2,...) | 返回给定参数的最大值 | max(3,1,2,4,5,6)返回6 |
min(x1,x2,...) | 返回给定参数的最小值 | min(3,1,2,4,5,6)返回1 |
round(x[,n]) | 返回浮点数x的四舍五入值,如果给出n值,则代表舍入到小数点后的位数 | round(3.1415926)返回3 round(3.1415926,3)返回3.142 |
- 在上面的表格中的第三列,有的加了math.,而有的没有,是使用的时候真的不需要,还是书的作者大意了?
Python中常用的三角函数需要用弧度值作为参数。如下表所示:
函数 | 功能 | 实例 |
acos(x) | 返回x的反余弦弧度值 | math.acos(0.64)返回0.8762980611683406 |
asin(x) | 返回x的反正弦弧度值 | math.asin(0.64)返回0.694498265626556 |
atan(x) | 返回x的正切弧度值 | math.atan(0.64)返回0.5693131911006619 |
atan2(x,y) | 返回x和y坐标值的反正切值 | math.atan2(-0.50,-0.50)返回-2.356194490192345 |
cos(x) | 返回x的弧度的余弦值 | math.cos(3)返回-0.9899924966004454 |
hypot(x,y) | 返回欧几里得范数sqrt(x*x+y*y) | math.hypot(3,2)返回3.605551275463989 |
sin(x) | 返回x的正弦弧度值 | math.sin(3)返回0.1411200080598672 |
tan(x) | 返回x的正切弧度值 | math.tan(3)返回-0.1425465430742778 |
degrees(x) | 将弧度转换为角度 | math.degrees(3)返回171.88733853924697 |
radians(x) | 将角度转换为弧度 | math.radians(3)返回0.05235987755982989 |
Python中常用的随机数函数如下表所示:
函数 | 功能 | 实例 |
choice(seq) | 返回seq中的随机项,seq可以是列表、元组或字符串 | random.choice(range(10)) |
randrange([x,]y[,a]) | 在x到y之间,以a递增的范围内随机取一个数 | random.randrange(5,10,2) |
random() | 随机生成一个实数,在(0,1)范围内 | random.random() |
seed([x]) | 改变随机数生成器的种子seed | random.seed(2) |
shuffle(lst) | 将lst里的所有元素重新排序 | random.shuffle(list1) |
uniform(x,y) | 在x至y的范围内随机生成一个实数 | random.uniform(1,10) |
以后再用代码测试这些函数。