随机数需要用的的模块为random,该模块用于生成伪随机数或随机选择序列中的元素。内部提供了多种函数,可生成不同类型随机数,如:整数、浮点数、随机序列、随机字符串、洗牌、抽样等。
文档:https://docs.python.org/3/library/random.html
源代码:https://github.com/python/cpython/blob/3.12/Lib/random.py
整数随机数
randint(a, b)
:返回 [a,b]
区间内一个随机整数
randrange([start=0,] stop[, step=1])
浮点随机数
(1)random()
:返回 [0.0, 1.0)
之间的一个随机浮点数
(2)uniform(a, b)
:返回 [a,b]
区间内的一个随机浮点数
列表随机数
(1)shuffle(seq)
:将序列 seq
中的元素进行随机排序
(2)choice(seq)
:从序列 seq
中随机返回一个元素
(3)sample(seq, [counts], k)
:从序列 seq
中随机选择 k
个元素作为列表返回,counts
是辅助输入多个数据的计数列表(具体看例子)
(4)choices(seq[, cum_weights, k=1])
:从序列 seq
中根据权值列表 cum_weights
中对应的权值来随机选择 k
个元素来作为列表返回
几乎所有的模块函数都依赖于基本函数 random()
,它会在半开放范围内均匀地生成一个随机浮点数,范围是 [0.0, 1.0)
。
其底层使用了 Mersenne Twister
,是目前测试最广泛的随机数生成器之一(但是其随机是具有确定性的,不适用于加密工作,应该使用 secrets
模块来生成用于安全的随机数)。
上述的序列指的是:字符串(str
)、列表(list
)、元组(tuple
)、集合(set
)、字典(dict
)、字节数组(bytearray
)、字节数组(bytes
)。
补充:而由于该库内还包含一些关于离散分布等数学类的库,不结合数学原理还真说不清,待补充…
"""使用随机数的库"""
from random import *
# 1.整数随机数
print("整数随机数")
print(f"randint(1, 10):{randint(1, 10)}")
print(f"randrange(0, 10, 2):{randrange(0, 10, 2)}")
print()
# 2.浮点随机数
print("浮点随机数")
print(f"random():{random()}")
print(f"uniform(1, 10):{uniform(1, 10)}")
print()
# 3.列表随机数
print("列表随机数")
arr = [1, 2, 3, 4, 5]
shuffle(arr)
print(f"shuffle(arr):{arr}")
print(f"choice([1, 2, 3, 4, 5]):{choice([1, 2, 3, 4, 5])}")
# 以下两种写法等价
print(f"sample(['red', 'blue'], counts=[4, 2], k=5):{sample(['red', 'blue'], counts=[4, 2], k=5)}")
print(f"sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5):{sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)}")
print(f"choices(['red', 'black', 'green'], [18, 18, 2], k=6):{choices(['red', 'black', 'green'], [18, 18, 2], k=6)}")
print()