http://python3-cookbook.readthedocs.io
数字的四舍五入
?对一个浮点数执行指定精度的舍入运算
对于简单的舍入运算,使用内置的 round(value,ndigits)函数即可。
In [1]: round(3.14,1)
Out[1]: 3.1
In [2]: round(3.1415,3)
Out[2]: 3.142
In [3]: round(-3.14,1)
Out[3]: -3.1
当一个值处在两个边界中间的时候,round函数会返回离他最近的偶数。当 ndigits 为负数时,舍入运算会作用于十位,百位,千位等
对于数据的格式化,如输出一定宽度的数,不需要使用round()函数:
In [1]: x = 3.1415926
In [2]: format(x,'0.2f')
Out[2]: '3.14'
In [3]: format(x,'0.4f')
Out[3]: '3.1416'
执行精确的浮点运算
?在对精确度要求比较高的情况下,需要对浮点数执行精确的计算操作,不希望出现任何小误差
在常规的计算中,浮点数的一个普遍问题是他们并不能精确的表示十进制数。即使是最简单的数学计算也会产生小的误差,
In [4]: a = 3.1
In [5]: b = 3.2
In [6]: a + b
Out[6]: 6.300000000000001
就如上面的例子,一个简单的加法运算,一眼就看出的结果,在python中却计算错误。这些错误是由底层cpu和IEEE 754标准通过自己的浮点单位去执行算术时的特征,由于python的浮点数据类型使用底层表示存储数据。简单的来说就是小数部分进行二进制转换时和精度取舍时产生了误差。
想要更加精确并且能容忍一定的性能损耗:
In [13]: from decimal import Decimal
In [14]: a = Decimal('3.1')
In [15]: b = Decimal('3.2')
In [16]: a+b
Out[16]: Decimal('6.3')
decimal模块还允许你控制计算的每一方面,包括数字位数和四舍五入运算:
In [17]: from decimal import localcontext
In [18]: a = Decimal('1.3')
In [19]: b = Decimal('1.7')
In [20]: print(a/b)
0.7647058823529411764705882353
In [25]: with localcontext() as ctx:
...: ctx.prec=3
...: print(a/b)
...:
0.765
In [26]: with localcontext() as ctx:
...: ctx.prec=50
...: print(a/b)
...:
0.76470588235294117647058823529411764705882352941176
数字的格式化输出
?希望将数字格式化后输出,并控制数字的位数,对齐,千位分隔符以及其他一些细节
在上面的例子中,已经接触过了 format 函数:
In [27]: x = 1234.56789
In [28]: format(x,'0.2f')
Out[28]: '1234.57'
In [29]: format(x,'>10.2f')
Out[29]: ' 1234.57' #占10个位,右对齐
In [30]: format(x,'<10.2f')
Out[30]: '1234.57 ' #占10个位,左对齐
In [31]: format(x,'^10.1f')
Out[31]: ' 1234.6 ' #占10个位,居中
In [32]: format(x,',')
Out[32]: '1,234.56789'
In [33]: format(x,'0,.1f')
Out[33]: '1,234.6'
二八十六进制整数
在 python 中要实现不同进制间的整数转换是简单的
In [34]: x = 1234
In [35]: bin(x)
Out[35]: '0b10011010010'
In [36]: oct(x)
Out[36]: '02322'
In [37]: hex(x)
Out[37]: '0x4d2'
In [38]: format(x,'b')
Out[38]: '10011010010'
In [39]: format(x,'o')
Out[39]: '2322'
In [40]: format(x,'x')
Out[40]: '4d2'
将其他进制转换为十进制的话,可以使用 int 方法
In [41]: int('10011010010',2)
Out[41]: 1234
随机选择
random 模块是一个很常见也很常用的随机模块,可以满足我们很多的日常需求
- 生成随机整数
>>> import random
>>> random.randint(0,10)
3
>>> random.randint(0,10)
0
>>> random.randint(0,10)
10
- 生成随机浮点数(0-1之间的小数)
random.random()
- 从一个序列中随机选择元素
list = [1,3,5,7,8,6,4,2]
random.choice(list)
- 提取N个不同元素
random.sample(values,2)
- 打乱序列中的元素顺序
random.shuffle(values)