Python Cookbook学习记录

3.数字、日期和时间
3.1对数值进行取整

#简单的取整, 四舍五入
print(round(1.23, 1))
print(round(1.27, 1))
print(round(-1.27, 1))
print(round(1.25361, 3))

#位数化为零
a = 1627731
#后一位取零 1627730
print(round(a, -1))
#后两位取零 1627700
print(round(a, -2))
#后三位取零 1627000
print(round(a, -3))

3.2执行精确的小数计算

'''
python小数以float类型存储但是是C中的double类型,一些十进制浮点数无法精确用二进制表示
如:x = 1.2 二进制存储:1.0011001100110011001100110011001100110011001100110011
转化为十进制:1.1999999999999999555910790149937383830547332763671875
所以普通浮点数无法做精确计算
'''
a = 4.2
b = 2.1
print(a + b)

from decimal import Decimal
a1 = Decimal('4.2')
b1 = Decimal('2.1')
print(type(a1+b1))
print(a1+b1)

nums = [1.23e+18, 1, -1.23e+18]
print(sum(nums))
import math
print(math.fsum(nums))

3.3对数值做格式化处理

#单独的数值
x = 1234.56789
print(format(x, '0.2f'))
print(format(x, '>10.1f'))
#添加千分位分隔符
print(format(x, ','))
print(format(x, '0,.1f'))
#科学计数法
print(format(x, 'e'))
print(format(x, '0.2E'))

3.4同二进制数、八进制数、十六进制数打交道

x = 1234
print(bin(x))
print(oct(x))
print(hex(x))
#消去前缀
print(format(x, 'b'))
print(format(x, 'o'))
print(format(x, 'x'))
a = -1234
print(format(x, 'b'))
#无符号的数值, 加上最大值设置比特位的长度
print(format(x+2**32, 'b'))

#转换字符串
print(int('4d2', 16))
print(int('10011010010', 2))

3.5从字节中打包和解包整数

data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
print(len(data))
print(int.from_bytes(data, 'little'))
print(int.from_bytes(data, 'big'))

x = 94522842520747284487117727783387188
#字节从低位到高位排列
print(x.to_bytes(16, 'big'))
#字节从高位到低位排列
print(x.to_bytes(16, 'little'))

3.6复数运算

#复数实例
a = complex(2, 4)
#不区分大小写
b = 3 - 5j
c = 6 - 8J
print(a, b, c, sep=' ')
print(a.real, a.imag, a.conjugate(), sep=' ')

print(a+b)
print(a-b)
print(a*b)
print(a/b)
print(abs(a))
#用数学函数产生复数,用cmath模块
import cmath
print(cmath.sin(a))
#求平方
print(cmath.exp(a))

3.7处理无穷大和NaN

'''
NaN:无定义的数或不可表示的数
'''
import math
a = float('inf')
b = float('-inf')
c = float('nan')
print(a, b, c, sep=' ')
#因为nan、无穷大不是固定数,用isinf()和isnan()判断是否是nan或无穷大
print(math.isinf(a))
print(math.isnan(c))
print(a+35)
print(a*10)
print(10/a)

print(c+23)
print(c*29)
print(10/c)
print(math.sqrt(c))
d = float('nan')
print(c==d)
print(c is d)
#产生nan
print(a/a)
print(a+b)

3.8分数的计算

from fractions import Fraction
#5/4  7/16
a = Fraction(5, 4)
b = Fraction(7, 16)
print(a+b)
print(a*b)
c = a*b
print(c.numerator)
print(c.denominator)
print(float(c))
#查找并返回最接近的分数, 且分数具有最大分母8
print(c.limit_denominator(8))
#将浮点数转化为分数
x = 3.75
y = Fraction(*x.as_integer_ratio())
print(y)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值