1. 绝对值
>>> abs(-5.0)
5.0
2. 数字取整
2.1. 只取整数部分int()
int(), 直接截去小数部分,剩下整数部分, 返回int型数;
>>> int(5.0) # 5
>>> int(5.1) # 5
>>> int(5.9) # 5
>>> int(6.0) # 6
>>>
>>> int(-5.0) # -5
>>> int(-5.1) # -5
>>> int(-5.9) # -5
>>> int(-6.0) # -6
2.2. 向下取整math.floor()
math.floor() 向下取整,返回int型数;
>>> math.floor(5.0) # 5
>>> math.floor(5.1) # 5
>>> math.floor(5.9) # 5
>>> math.floor(6.0) # 6
>>>
>>> math.floor(-5.0) # -5,小于等于-5.0 的最大整数是-5;
>>> math.floor(-5.1) # -6,小于等于-5.1 的最大整数是-6;
>>> math.floor(-5.9) # -6,小于等于-5.9 的最大整数是-6;
>>> math.floor(-6.0) # -6,小于等于-6.0 的最大整数是-6;
2.3. 向上取整 math.ceil()
math.ceil() 向上取整,返回int型数;
>>> math.ceil(5.0) # 5
>>> math.ceil(5.1) # 6
>>> math.ceil(5.9) # 6
>>> math.ceil(6.0) # 6
>>>
>>> math.ceil(-5.0) # -5,大于等于-5.0 的最小整数是-5;
>>> math.ceil(-5.1) # -5,大于等于-5.1 的最大整数是-5;
>>> math.ceil(-5.9) # -5,大于等于-5.9 的最大整数是-5;
>>> math.ceil(-6.0) # -6,大于等于-6.0 的最大整数是-6;
2.4. 四舍五入round()
round(number[, ndigits]) 四舍五入,如果两边整数一样远,刚返回偶数一边;
参数ndigits表示小数位的数目;如果ndigits=0,返回int型数,如果ndigits>=1, 返回float型数;
>>> round(-2.5) # -2
>>> round(-1.5) # -2
>>> round(-0.5) # 0
>>> round( 0.5) # 0
>>> round( 1.5) # 2
>>> round( 2.5) # 2
>>> round(1.05, 1) # 1.1 本应该靠偶数一边是1.2, 但由于内部存储原因,返回1.1;
#1.05
# + 0.0000_0000_0000_0010
# -----------------------
# = 1.0500_0000_0000_0012
# 所以1.05更靠近1.1 这边;
>>> round(1.15, 1) # 1.1 本应该靠偶数一边是1.2, 但由于内部存储原因,返回1.1;
#1.15
# + 0.0000_0000_0000_0002
# -----------------------
# = 1.1500_0000_0000_0001
# 所以1.05更靠近1.1 这边;
>>> round(1.25, 1) # 1.2
>>> round(1.35, 1) # 1.4
>>> round(1.45, 1) # 1.4
>>> round(1.55, 1) # 1.6
>>> round(1.65, 1) # 1.6
>>> round(2.675, 2) # 2.67, 本应该靠偶数一边是2.68, 但由于内部存储原因,返回2.67;
在python2.7的doc中,round()的最后写着,"Values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done away from 0."保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。
但是到了python3.5的doc中,文档变成了"values are rounded to the closest multiple of 10 to the power minus ndigits; if two multiples are equally close, rounding is done toward the even choice."如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,而round(1.5)会保留到2。
round(2.675, 2) 的结果,不论我们从python2还是3来看,结果都应该是2.68的,结果它偏偏是2.67,为什么?这跟浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。
3. 乘方、开方
pow(x, y) # 求x的y次方;
>>> pow(3, 2) # 9,求平方,返回int型数;
>>> pow(3, 1/2) # 1.7320508075688772, 1/2次方即开方运算;
>>> pow(4, 1/2) # 2.0, 平方根返回的是float型数;
math.pow(),与pow()类似
>>> math.pow(3, 2) # 9.0, 返回的是float型数
对于求平方根,除了可以使用math.pow(x, 1/2)外,还有专门的平方根函数math.sqrt(x)
>>> math.sqrt(2) # 1.4142135623730951,求平方根
>>> math.sqrt(4) # 2.0, 平方根返回的是float型数;
4. 三角函数、对数
三角函数
>>> math.pi # 3.1415_9265_3589_793, 使用math.pi可以调用π;
>>> math.sin(math.pi / 6) # 0.4999_9999_9999_9999_4,得到的并不是0.5;
>>> math.cos(math.pi / 3) # 0.5000_0000_0000_0001,得到的并不是0.5;
>>> math.tan(math.pi / 4) # 0.9999_9999_9999_9999,得到的并不是1.0;
对数,math.log(A, B=e) 以B为底,A的对数,默认以e为底;
>>> math.e # 2.7182_8182_8459_045,自然常数e;
>>> math.log(100, 10) # 2.0,返回的是float型数;
>>> math.log(math.e) # 1.0,
5. 随机数
5.1. 随机整数
randint(a, b),[a, b]之间的整数,包含b;
>>> import random
>>> random.randint(10, 20) # 16,返回[10, 20]之间的随机整数;算个bug吧
>>> random.randint(20, 10) # 报错ValueError,参数对顺序有要求;
>>> random.randint(10, 10) # 10,上下限相同,返回这个数;
randrange(start, stop=None, step=1, _int=<class 'int'>), 不包含stop
>>> random.randrange(10, 20, 2) # 返回[10, 20)之间的偶数,不包括stop
5.2. 随机浮点数
uniform(a, b), [a, b]之间的浮点数,包含b;
>>> import random
>>> random.uniform(10, 20) # 12.132xxxxx,返回[10, 20]之间的随机浮点数;
>>> random.uniform(20, 10) # 10.414xxxxx,uniform(),两个参数不关心顺序;
>>> random.uniform(10, 10) # 10.0,上下限相同,返回这个数;
random.random(), [0, 1)之间的浮点数,不包含1;不需要参数
>>> random.random()
0.1862385***
5.3. 在待选中随机选择
语法:random.choice(seq)
参数:seq可以是列表、元组、字符串
返回:返回一个元素
>>> import random
>>> random.choice([1, 3, 5]) # 从list中随机选择一个
3
>>> random.choice('abc!@#') # 从str中随机选择一个
#
语法:random.sample(seq, n)
参数:seq,列表、元组、字符串;n,数目;
返回:返回一个列表
>>> import random
>>> random.sample([1, 3, 5, 7, 9], 3) # 从list中随机选择三个
[5, 1, 3]
>>> random.sample('abc!@#') # 从str中随机选择三个
['a', '#', 'b']
5.4. 打乱序列
语法:random.shuffle(x, random=None)
参数:x,一个list;random,??
返回:返回None,传入的lst会被改变
>>> import random
>>> L0 = [1, 2, 3, 4, 5]
>>> random.shuffle(L0) # 将L0洗牌, 该语句返回None
>>> L0
[4, 5, 3, 1, 2]
6. 平均值/方差/标准差
需要第三方模块 numpy
import numpy as np
f_mean = np.mean(_list) # 平均值
f_var = np.var(_list) # 方差
f_std = np.std(_list, ddof=1) # 标准差
7. 进制转换
7.1. 使用bin/oct/hex、int
7.1.1. 十进制-> 其它进制
>>> #使用bin/oct/hex,输入int,返回str;
>>> bin(50) # '0b110010',十进制 -> 二进制,返回的值为字符串,以0b开头;
>>> oct(50) # '0o62',十进制 -> 八进制,返回的值为字符串,以0o开头;
>>> hex(50) # '0x32', 十进制 -> 十六进制,返回的值为字符串,以0x开头;
7.1.2. 其它进制-> 十进制
>>> s_bin = '110010'# 二进制str;
>>> i_int= int(str(s_bin), 2) # 50, 输入二进制str,返回十进制整数;
>>>
>>> i_int = int(str(62), base=8)# 50,输入八进制str,返回十进制整数;
>>> i_int = int(str(32), base=16) # 50,输入十六进制str,返回十进制整数;
7.2. 使用format
缺点是format的参数只能是各进制的整数,不能是str;
所有需要把参数使用int()处理后再使用format, 如:
'{n:08b}'.format(n=int(s0, base=16))
7.2.1. 转为二进制
>>> '{:b}'.format(13) #输入十进制整数,输出二进制str,:b表示转为二进制;
'1101'
>>> '{:08b}'.format(13) #输入十进制整数,输出二进制str,:08b表示转为二进制,宽度为8,不足补0;
'00001101'
>>> '{:08b}'.format(0x000D)#输入十六进制整数,输出二进制str;
'00001101'
>>> s0='0xd'
>>> '{n:08b}'.format(n=int(s0, base=16)) #输入十六进制str, 转为二进制, 中间需要经过int()处理
'00001101'
7.2.2. 转为八进制
>>> '{:o}'.format(13) #输入十进制整数,输出八进制str,:o表示转为八进制;
'15'
>>> '{:08o}'.format(13) #输入十进制整数,输出八进制str,:08o表示转为八进制,宽度为8,不足补0;
'00000015'
>>> '{:08b}'.format(0xD)#输入十六进制整数,输出八进制str;
'00000015'
7.2.3. 转为十六进制
使用大写的:X, 可以转出的16进制字符.
>>> '{:x}'.format(13) #输入十进制整数,输出十六进制str,:x表示转为十六进制
'd'
>>> '{:04x}'.format(13) #输入十进制整数,输出十六进制str,:04x表示转为十六进制,宽度为4,不足补0
'000d'
>>> '{:04x}'.format(0b01101)#输入二进制整数,输出十六进制str;
'000d'
>>> '{:04x}'.format(int('0b01101', base=2)#输入二进制str,输出十六进制str;
'000d'