在Python中,我们可以使用random模块生成随机数。但是,在某些情况下,程序需要重现的随机序列。这时候就需要使用随机数种子来控制随机数的生成。
一、随机数与种子简介
一个随机数就是指在一定范围内的任意数字。在计算机中,随机数通常使用伪随机数生成器来生成。伪随机数生成器是一个计算机程序,它按照一定的算法和种子值来生成随机数。
随机数生成器中的种子值可以看作是一个起点,它决定了伪随机数生成器生成随机数的序列。如果两个随机数生成器的种子值相同,那么它们所生成的随机数序列也会相同。反之,如果它们的种子值不同,那么它们的随机数序列也会不同。
二、random模块的随机数生成函数
在Python的random模块中,有许多函数可以帮助我们生成随机数。下面是几个常用的函数:
import random
# 生成一个[0,1)之间的随机浮点数
random.random()
# 生成一个[a,b]之间的随机整数
a, b = 1, 10
random.randint(a,b)
# 从序列中随机选取一个元素
seq = [1, 2, 3, 4, 5]
random.choice(seq)
# 将序列中的元素随机排序
random.shuffle(seq)
三、控制随机数生成的方法
1. 函数seed()
在Python中,使用函数seed(a=None)来设置随机数生成器的种子值。
当种子值a为None时,使用系统当前时间作为种子值。因此,每次运行程序生成的随机数序列都会不同。
import random
# 使用系统当前时间作为种子值生成随机数序列1
random.seed()
seq1 = [random.randint(1,100) for _ in range(5)]
print(seq1)
# 使用系统当前时间作为种子值再次生成随机数序列2
random.seed()
seq2 = [random.randint(1,100) for _ in range(5)]
print(seq2)
输出:
[50, 88, 85, 28, 71]
[84, 44, 80, 47, 79]
当种子值a固定时,程序每次运行生成的随机数序列都会相同。
import random
# 将种子值设置为1,生成随机数序列1
random.seed(1)
seq1 = [random.randint(1,100) for _ in range(5)]
print(seq1)
# 再次将种子值设置为1,生成随机数序列2
random.seed(1)
seq2 = [random.randint(1,100) for _ in range(5)]
print(seq2)
输出:
[17, 72, 97, 8, 32]
[17, 72, 97, 8, 32]
2. 函数randrange()
和函数randint(a,b)类似,函数randrange(start,stop,step)可以用来生成一个[start,stop)之间以step为步长的随机整数,但它可以接受一个可选的参数,用来设置随机数生成器的种子值。
import random
# 种子值为None,生成随机数序列1
seq1 = [random.randrange(0,10,2) for _ in range(5)]
print(seq1)
# 种子值为1,生成随机数序列2
random.seed(1)
seq2 = [random.randrange(0,10,2) for _ in range(5)]
print(seq2)
输出:
[8, 8, 8, 2, 0]
[0, 8, 4, 8, 8]
3. 函数shuffle()
函数shuffle(seq, random=None)将序列seq随机排序,可以接受一个可选的参数random,用来设置随机数生成器的种子值。
import random
seq = [1, 2, 3, 4, 5]
# 种子值为None,随机排序seq
random.shuffle(seq)
print(seq)
# 种子值为1,随机排序seq
random.seed(1)
random.shuffle(seq)
print(seq)
输出:
[4, 1, 5, 2, 3]
[2, 1, 4, 5, 3]
四、随机数应用
随机数在计算机科学中有着广泛的应用,例如:
- 生成游戏中的随机地图、角色、物品等
- 模拟实验和观察随机事件的产生分布情况
- 加密算法中的随机数生成
- 用来评估算法的性能
总结
在Python中,我们可以使用random模块来生成随机数,使用seed()函数来控制随机数的生成。了解和掌握随机数的生成,在实际开发中可以更加灵活地运用Python。