我知道来自任何一台计算机的随机数并非真正随机,但我希望我所获得的变化比我目前所获得的更多。我试图模拟骰子卷,例如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返回结果...仍然不确定种子是否尽可能准确。
答案 0 :(得分:5)
randrange
与range
一样,不包含其上限。
你的骰子没有6 ..
比较randint
,其中 包含上限。