Python:随机种子问题

时间:2014-07-16 16:10:45

标签: python random

我知道来自任何一台计算机的随机数并非真正随机,但我希望我所获得的变化比我目前所获得的更多。我试图模拟骰子卷,例如4d6将是一个6面骰子的四卷。这比简单地生成4到24之间的随机数要准确得多(我不会在这里进入概率曲线。)

我发现的是,当前系统时间的播种(我一直认为这种播种与任何播种一样好,可能是错的)是数字一直很低。我的意思是在大约50卷3d6之后,我从来没有得到超过12的总和。这是该范围的前1/3的0命中率,我认为这特别奇怪。

这里有一些代码,希望有人知道更好的方法来做到这一点,也许从系统时间播种本质上是坏的,我只是不知道: (我省略了不相关的类定义)

from random import randrange, seed

def dieroll(self,numrolls,dierange):
    """ This method will return 'num' rolls of a d'range' die. 
    For example, 4d6 will simulate four rolls of a 6-sided die. """

    seed()
    sum = 0
    for roll in range(0, numrolls):
        dieroll = randrange(1,dierange)
        sum = sum + dieroll
    print("Sum = %d" % sum)

以下是我的结果的一小部分示例:

>>> c.dieroll(3,6) 
Sum = 3 
>>> c.dieroll(3,6) 
Sum = 11 
>>> c.dieroll(3,6) 
Sum = 9 
>>> c.dieroll(3,6) 
Sum = 9 
>>> c.dieroll(3,6) 
Sum = 10 
>>> c.dieroll(3,6) 
Sum = 11 
>>> c.dieroll(3,6) 
Sum = 7 
>>> c.dieroll(3,6) 
Sum = 7 
>>> c.dieroll(3,6) 
Sum = 11 
>>> c.dieroll(3,6) 
Sum = 11 
>>> c.dieroll(3,6) 
Sum = 4 
>>> c.dieroll(3,6) 
Sum = 11 
>>> c.dieroll(3,6) 
Sum = 6 
>>> c.dieroll(3,6) 
Sum = 12 
>>> c.dieroll(3,6) 
Sum = 6 
>>> c.dieroll(3,6) 
Sum = 8 
>>> c.dieroll(3,6) 
Sum = 8 

我期待一个价值的钟形曲线,虽然这个小样本集(我不会发布整个50个结果),但我的整体结果偏低。

感谢您对此提供任何帮助 - 我希望这些结果与真实骰子一样逼真。尽可能!

编辑:经过大约20次滚动后,我确实得到了13和14,所以我知道这是可能的。不过,我有大约10岁以下的人。

第二编辑:我刚刚意识到dierange应该是dierange + 1 - 1d6始终从1-5返回结果...仍然不确定种子是否尽可能准确。

1 个答案:

答案 0 :(得分:5)

randrangerange一样,不包含其上限。

你的骰子没有6 ..

比较randint,其中 包含上限。