我知道任何一台计算机上的随机数并不是真正随机的,但我希望我的变化比我目前得到的更多.我正在尝试模拟骰子卷,例如4d6将是4卷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)
Run Code Online (Sandbox Code Playgroud)
以下是我的结果的一小部分示例:
>>> 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
Run Code Online (Sandbox Code Playgroud)
我期待一个价值的钟形曲线,虽然这个小样本集(我不打算发布整个50个结果)但我的整体结果偏低.
感谢您对此的任何帮助 - 我希望这些结果尽可能像"真正的骰子"一样逼真!
编辑:经过大约20次滚动后,我确实得到了13和14,所以我知道这是可能的.不过,我有大约10岁以下的人.
第2次编辑:我刚刚意识到dierange应该是dierange + 1 - 1d6始终从1-5返回结果...仍然不确定种子是否尽可能准确.