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

Nir*_*iel 9 python

我习惯打字random.randrange.我会做一个from random import Random从现在开始发现错误.

对于涉及程序生成的游戏(nope,而不是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)]
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

Joh*_*erg 13

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

只是用

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

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

random.seed(7)
print [random.randrange(5) for i in range(10)]
Run Code Online (Sandbox Code Playgroud)