Logo

郎哥编程

随机数

2021-01-08 194

随机数在实际编程中使用非常普遍,数据加密、身份鉴定、电子商务等应用都要用到随机数。在Python语言中,random模块提供了随机数的创建。

使用random()函数创建随机数

random()函数在0.0至1.0之间均匀生成随机浮点数,若需要其它数值范围的随机数,可以对random()函数生成的随机浮点数进行数学运算,来获取其它数值范围的随机数。

01.png

案例1:生成一个0.0至1.0之间的随机浮点数。

>>> import random
>>> r = random.random()
>>> print(r)
0.585594459081815
>>> r = random.random()
>>> print(r)
0.4535870687364473
>>>

案例2:生成100以内的随机整数

案例代码见课程资源(unit12/case02.py)

# 导入random模块
import random
# 定义随机数生成函数
# 函数生成100以内的随机整数
def randint():
    return int(random.random() * 100)
# 生成10个100以内的随机整数
for i in range(10):
    print(randint(),end=" ")

函数randint()生成100以内的随机整数,函数内部使用random()函数生成0.0至1.0范围的随机浮点数,将生成的随机浮点数乘以100,并以整数形式返回结果。

生成随机整数

random模块的randrange()函数可以生成一定数值范围内的随机整数,randrange()函数有两个版本,主要是传入的参数不同。randint()函数生成一个介于传入参数a和b范围内的随机整数。

02.PNG

案例代码:

>>> import random
>>> random.randrange(100)
66
>>> random.randrange(100,1000)
278
>>> random.randint(101,121)
105
>>>

序列对象的随机操作

序列对象的随机操作是指通过random模块提供的函数,可以实现从序列对象中随机选取一个元素、随机打乱序列对象元素的位置、对序列对象随机抽样操作。

用于序列对象操作的函数如下表所示:

03.PNG

注释(2)

函数声明:

choices(
population, 
weights=None, 
*, 
cum_weights=None, 
k=1
)

函数的主要功能是从population中随机选取子表。若没有提供后面的参数,就是随机选取,若提供了后面的参数,会按照一定的概率选取。

参数weights设置相对权重,它的值是一个列表,设置之后,population每个元素被抽取到的概率就被确定了。

参数cum_weights是累加权重,Python会自动把相对权重转换为累加权重,即如果你直接给出累加权重,那么就不需要给出相对权重。

参数k为选取的元素数量。

案例代码:

>>> import random
>>> s = [10,11,16,20,9,101]
>>> #随机选取5个元素
>>> random.choices(s,k=5)
[10, 20, 11, 101, 20]
>>>#设置相对权重
>>> random.choices(s,weights=[1,0,3,0,0,6],k=5)
[10, 16, 16, 101, 101]
 
>>> # 随机生成权重列表
>>> w = [random.random() for v in range(6)]
>>> print(w)
[0.8036686972802367, 0.7607912706617015, 0.3240968790952292, 0.3603174352386108, 0.5089516033876703, 0.1332121436444902]
>>> random.choices(s,w,k=5)
[10, 10, 10, 11, 11]

从输出结果可以看出,设置相对权重后,对应权重高的元素选取的概率比较大。

注释(3)

函数声明:

sample(population, k)

该函数用于对序列对象population随机抽样,抽取长度为k。

函数返回来来自population元素的新列表,同时保持population不变。 结果列表按选择顺序排列,选取的是population的随机样本。

案例代码:

>>> import random
>>> data = [41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95]
>>> random.sample(data,6)
[31, 35, 73, 63, 20, 81]
>>> random.sample(data,6)
[35, 30, 50, 37, 20, 31]
>>> random.sample(data,3)
[95, 63, 29]
>>>

设置随机数种子

计算机的随机数都是伪随机数,都是以一个真随机数(种子)作为初始条件,然后用一定的算法不停迭代产生随机数。

Python默认以系统时间作为随机种子,开发者可以重新设置随机数种子。

设置随机数种子的函数如下表所示:

04.PNG

注释(1)

函数声明:

seed(a=None, version=2)

函数初始化随机数生成器的种子。

参数a为要设置的随机数种子。若a 被省略或为 None,则使用当前系统时间。

参数version用于函数版本选择,默认为版本2,版本1是较旧的版本。

案例代码:

# 导入random模块
import random
# 导入time模块
import time
# 定义随机数生成函数
# 函数生成100以内的随机整数
def randint():
    return int(random.random() * 100)
# 获取当前时间设置随机数种子
random.seed(time.time())
# 生成10个100以内的随机整数
for i in range(10):
    print(randint(),end=" ")

代码在线纠错(通义千问 qwen-max)

支持粘贴多个代码文件,提交后由阿里云通义千问自动分析代码漏洞、语法错误、逻辑问题并给出修改建议。
您已解锁 AI 代码纠错功能,可正常使用!

评论区

登录 后发表评论
暂无评论