# 数字Number
"""
python3支持三种不同的数值类型:
整型(int):通常被称为整型或整数,正整数或负整数,不带小数点。python3整型大小是没有限制的可以当作Long类型使用,所以python3没有python2的Long类型
bool是整型的子类型
"""
print(isinstance(True, int))
"""
浮点型(float):浮点型由整数部分与小数部分,浮点型也可以使用科学计数法表示
"""
a = 2.5e2
print(a, type(a)) # 250.0 <class 'float'>
b = 1e2
print(b, type(b)) # 100.0 <class 'float'>
"""
复数(complex):复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型
"""
a = complex(1, 2)
print(a, type(a)) # (1+2j) <class 'complex'>
# python数字类型转换
"""
int(x)将x转换为一个整数
float(x)将x转换为一个浮点数
complex(x)将x转换到一个复数,实数部分为x,虚数部分为0
complex(x,y)将x和y转换到一个复数,实数部分为x,虚数部分为y
"""
n = None
print(n, type(n)) # None <class 'NoneType'>
# 数学函数
# abs(x):返回数字的绝对值
print(abs(-10)) # 10
# math.ceil(x):返回数字的上入整数
import math
print(math.ceil(4.1)) # 5
print(math.ceil(-3.5)) # -3
# cmp(x,y):如果x<y,返回-1,如果x==y,返回0,如果x>y,返回1。
from past.builtins import cmp
print(cmp(1, 2)) # -1
print(cmp(1, 1)) # 0
print(cmp(2, 1)) # 1
# math.exp(x):返回e的x次幂
print(math.exp(1)) # 2.718281828459045
# fabs(x):已浮点数的形式返回x的绝对值
print(math.fabs(-10)) # 10.0
# floor(x):返回数字的下舍整数
print(math.floor(4.9)) # 4
print(math.floor(-4.1)) # -5
# log(x,[base=None]):返回默认以e为基数的x的对数,也可以指定x的基数
print(math.log(math.e)) # 1.0
# 返回以10为基数,100的对数
print(math.log(100, 10)) # 2.0
# 返回以10为基数,x的对数,还可以写成log10(x)
print(math.log10(100)) # 2.0
# max(x1,x2,x3,....,xn):返回给定参数的最大值
print(max(1, 2, 3, 4, 5)) # 5
print(max('12345')) # 5
print(max([1, 2, 3, 4, 5])) # 5
print(max((1, 2, 3, 4, 5))) # 5
print(max({1, 2, 3, 4, 5})) # 5
print(max({1: 6, 2: 7, 3: 8, 4: 9, 5: 10})) # 5
# min(x1,x2,x3,...):返回给定参数的最小值,参数可以为序列
print(min(1, 2, 3, 4, 5)) # 1
print(min('12345')) # 1
print(min([1, 2, 3, 4, 5])) # 1
print(min((1, 2, 3, 4, 5))) # 1
print(min({1, 2, 3, 4, 5})) # 1
print(min({1: 6, 2: 7, 3: 8, 4: 9})) # 1
# modf(x):返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示
print(math.modf(123.456)) # (0.45600000000000307, 123.0)
math_modf = math.modf(123.456)
print(math_modf, type(math_modf)) # (0.45600000000000307, 123.0) <class 'tuple'>
# pow(x,y) : x**y运算后的值
print(pow(2, 3)) # 8
# round(x,[n]):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数
print(round(1.53)) # 2
print(round(1.53, 1)) # 1.5
# sqrt(x):返回数字x的平方根
print(math.sqrt(4)) # 2
print(math.sqrt(9)) # 3
print(math.sqrt(11)) # 3.3166247903554
print(math.sqrt(127)) # 11.269427669584644
# 随机数函数
# choice(seq):从序列的元素中随机挑选一个元素 序列:字符串,列表,元组
# 从0~9中随机挑选一个整数
import random
print(random.choice(range(10))) # 3
# 从字符串中随机挑选一个元素
print(random.choice('abcde')) # b
# 从列表中随机挑选一个元素
print(random.choice([1, False, 'qaz', (20,), {1, 2, 3}, 2+3j, {1: 2, 2: 3}])) # {1: 2, 2: 3}
# randrange([start],stop,[step]):从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认为1
print(random.randrange(1, 10, 2)) # 5
print(random.randrange(1, 10, 2)) # 7
print(random.randrange(1, 10, 2)) # 3
# random():随机生成一个实数,范围[0,1)
print(random.random()) # 0.9161723915313725
# shuffle(lst):将序列的所有元素随机排序
listvar = [1, 2, 4, 5, 6]
random.shuffle(listvar)
print(listvar) # [5, 1, 6, 4, 2]
# 随机生成一个实数,在[x,y]范围内
print(random.uniform(8, 10)) # 9.302313677946039
# 随机生成一个整数,在[x,y]的范围内
print(random.randint(8, 10)) # 8