python的random.Random.seed是如何工作的?

时间:2012-01-25 20:11:23

标签: python

我以前打字random.randrange。我现在要from random import Random来发现错误。

对于涉及程序生成的游戏(不是,不是Minecraft克隆:p)我想保留几个不同的伪随机数生成器:

  • 一个世界的一代(风景,任务等),
  • 一个用于世界上可能发生的随机事件(例如战斗中的伤害)。

理由是我希望能够重现第一个,所以我不希望第二个干扰。

我认为random.Random是为此而做的。不过有些事让我感到困惑:

import random
rnd = random.Random()
rnd.seed(0)
print [random.randrange(5) for i in range(10)]
rnd.seed(0)
print [random.randrange(5) for i in range(10)]

产生两种不同的序列。当我做rnd = random时,事情按预期工作,但我确实需要几个发电机。

我错过了什么?

2 个答案:

答案 0 :(得分:13)

它几乎与您尝试的完全一样,但rnd.seed()适用于rnd 对象

只需使用

rnd = random.Random(0) # <<-- or set it here 
rnd.seed(7)
print [rnd.randrange(5) for i in range(10)]

或通过设置全局种子,如下所示:

random.seed(7)
print [random.randrange(5) for i in range(10)]

答案 1 :(得分:4)

将种子传递给Random

的构造函数
>>> 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]