python';是随机的吗?

python';是随机的吗?,python,Python,我习惯于键入random.randrange。从现在开始,我将从随机导入随机执行,以发现错误 对于涉及程序生成的游戏(不,不是Minecraft克隆:p),我想保留几个不同的伪随机数生成器: 世界的一代人(风景、任务等) 一个是世界上可能发生的随机事件(如战斗中的伤害) 基本原理是我想复制第一个,所以我不想第二个干扰 我以为是随机的。随机的就是为了这个。然而,有件事让我感到困惑: import random rnd = random.Random() rnd.seed(0) print [r

我习惯于键入
random.randrange
。从现在开始,我将从随机导入随机执行
,以发现错误

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

  • 世界的一代人(风景、任务等)
  • 一个是世界上可能发生的随机事件(如战斗中的伤害)
基本原理是我想复制第一个,所以我不想第二个干扰

我以为是随机的。随机的就是为了这个。然而,有件事让我感到困惑:

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
时,事情会按预期工作,但我确实需要几个生成器


我遗漏了什么?

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

只用

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

将种子传递给
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]

事实上我也花了几分钟才发现。不要为我们所有人的遭遇感到难过,很高兴事情解决了:)
>>> 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]