我以前打字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
时,事情按预期工作,但我确实需要几个发电机。
我错过了什么?
答案 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]