Python随机生成器的赔率与计算的赔率不同

2024-06-14 23:15:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个练习来模拟抽奖(从45分中抽出4个球)。我随机生成了一个由4个数字组成的列表,然后迭代地将其与进一步随机生成的4个数字集进行比较。这似乎是可行的,尽管尝试匹配的次数通常在10-100的千分之一,但是匹配4/45的几率应该接近5000分之一。当我把我的列表作为一组进行比较时,顺序应该无关紧要,所以我很困惑为什么与“理论”相比几率如此之低。我已经运行了几十次,而且总是以相同的输出。我是Python新手,所以我猜这里有一个基本错误,但是任何细节都会有所帮助。在

import random

def comparator(x,y):
    counter = 1
    while set(x) != set(y):
        y = random.sample(range(1,46),4)
        if set(x) == set(y):
            print x,y
            return counter
        else:
            counter +=1


#call the function 5 times 
for i in range(1,6):
    selection = random.sample(range(1,46),4)
    draw = []
    output = comparator(selection,draw)
    print "Iteration %d = %d attempts" %(i,output)

Tags: sample列表outputcounterrange数字random次数
2条回答

这是一道数学题。成功的几率实际上是:

math.factorial(46)/math.factorial(4)/math.factorial(46-4)

它是1到:

^{pr2}$

https://en.wikipedia.org/wiki/Lottery_mathematics

实际上,你在第一次成功时就停止了,所以你的测量有点偏颇。在

检查你的数学。我计算概率的方法是,它是1/45*44*43*42/4!=148995。分子是因为采样时没有替换,因此,在选取第一个数字之后,匹配下一个数字的几率变为1/(n-1),依此类推。我除以4!因为顺序不重要,有4个!从45个数字中选择4个不需要替换的方法。在

相关问题 更多 >