彩票概率Python代码

Lon*_*ham 1 python

我正在编写一个代码来解决这个问题:

你和你的朋友都在纽约,并计划去看百老汇音乐剧.不幸的是,纽约是纽约,门票只是有点贵.但是其中一个节目每晚都有彩票抽奖活动,像你这样的贫困人士有机会赢得购买稍微便宜的优质座位票的权利.彩票的操作如下.首先,每个有兴趣的人都会进入乐透区.然后,抽出n个幸运获奖者,并且每个获奖者都可以购买最多T票.

考虑到您的团队中的人数(所有人都进入了抽奖)以及进入抽奖的人数总数,您可以获得整个团体的门票的概率是多少?假设n个幸运获胜者是从进入彩票的m个人中随机统一选择的,并且每个人最多可以赢一次.

这是我的代码:

import math

def lottery():

    m = int(raw_input('The number of people who entered the lottery: '))
    n = int(raw_input('The number of winner drawn from the total: '))
    t = int(raw_input('The number of tickets each winner can purchase: '))
    p = int(raw_input('The number of people in your group: '))

    def combinations(n, k):
        if 0 <= k <= n:
            ntok = 1
            ktok = 1
            for t in xrange(1, min(k, n - k) + 1):
                ntok *= n
                ktok *= t
                n -= 1
            return ntok // ktok
        else:
            return 0

    needed_wins = int(math.ceil(p/t))

    others = m - p

    loss = 0
    for i in range(needed_wins):
        loss += combinations(others, n-i) * combinations(p, i)

    total = combinations(m, n)

    prob = 1 - loss / total

    print(prob)
Run Code Online (Sandbox Code Playgroud)

我试图运行它,但结果出错了.例如,如果组合为(100,10,2,1),则结果应为0.1; 相反,它返回1.我真的很感激,如果有人可以帮助我在这里.

Ned*_*der 5

在Python 2中,当你分割两个整数时,你总是得到一个整数结果.尝试将此行添加到文件的顶部,这将获得新的Python 3行为,其中划分int生成浮点数:

from __future__ import division
Run Code Online (Sandbox Code Playgroud)