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

时间:2018-02-19 05:42:49

标签: python random

我有一个模拟彩票的练习(从45个抽出的4个球)。我随机生成了一个包含四个数字的列表,然后迭代地将其与进一步随机生成的4个数据集进行比较。这似乎有效,尽管获得匹配的尝试次数通常在10到100的数千个数字中。然而匹配4/45的几率应该接近5000中的1。当我将我的列表作为集合进行比较时,顺序不应该是重要的,所以我很难理解为什么赔率与#34相比如此之低;理论&#34 ;.我已经运行了几十次并且始终具有相同的输出。我是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)

2 个答案:

答案 0 :(得分:1)

这是一个数学问题。实现正确的可能性实际上是:

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

是1到:

163185.0

请参阅https://en.wikipedia.org/wiki/Lottery_mathematics

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

答案 1 :(得分:0)

检查你的数学。我计算出概率的方法,它在45 * 44 * 43 * 42/4中达到1! = 148,995。分子是因为你在没有替换的情况下进行采样,因此,在挑选第一个数字之后,匹配后续数字的几率变为1 /(n-1),依此类推。我除以4!因为顺序没关系,有4个!如何在没有替换的情况下从45个中挑选4个数字。