python的random.seed是如何工作的

0 投票
2 回答
2716 浏览
提问于 2025-04-17 18:30

我在跟着这个例子学

https://stackoverflow.com/a/9009657/1890488

他得到的结果是

>>> import random
>>> rnd = random.Random(0)
>>> [rnd.randint(0, 10) for i in range(10)]
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6]
>>> rnd = random.Random(0)
>>> [rnd.randint(0, 10) for i in range(10)]
[9, 8, 4, 2, 5, 4, 8, 3, 5, 6]
>>> rnd = random.Random(1)
>>> [rnd.randint(0, 10) for i in range(10)]
[1, 9, 8, 2, 5, 4, 7, 8, 1, 0]

我有几个问题

  1. 为什么前两个序列是一样的?
  2. 当我们传入1作为参数时,这是什么意思?那第一个值是怎么变成1的?

2 个回答

2

因为这只是一个伪随机生成器。它是一个函数(从数学的角度来看),具有良好的平方分布。通常的做法是使用系统时间的毫秒数作为种子:

rnd = random.Random(int(round(time.time() * 1000)))
3

前面两个序列是一样的,因为你用相同的值来设置它们的起始点。这是一个特点

可以设置的起始点让你可以故意重复你的序列,只要使用相同的起始值就行了。比如说,这可以用来实现一个游戏的重放,和原来的游戏完全一样,尽管游戏在里面使用了随机数生成器来处理游戏中的遭遇或一些人工智能的决策。

撰写回答