Python概率程序 - 从甲板上的x卡中抽取的x卡中抽取x卡的几率

时间:2016-03-19 22:05:54

标签: python probability

因此该程序大部分时间都按预期工作。当只有1张牌的差异时似乎失败了。例如,从40张牌中抽取6张牌,并想要5张特定牌,这将返回值“0”

它适用于其他情况。例如,从40个牌组中抽取5张牌,需要3张特定牌才能获得1/988的答案

所有卡片都是独一无二的,彼此独立。

from math import factorial
from fractions import Fraction


deckNo = int(input("Enter the number of cards in the deck: "))
cardsDrawn = int(input("Number of cards drawn : "))
cardNo = int(input("Enter the number of cards you want to draw: "))


cardDifference = cardsDrawn - cardNo
newDeckNo = deckNo - cardNo

finalOdds = (factorial(cardsDrawn) * factorial(newDeckNo)) / (factorial(cardDifference) * factorial(deckNo))
finalOdds = Fraction(finalOdds).limit_denominator(10000)

print(finalOdds)

这是我用于概率的方法的错误吗?如果是这样,我应该用什么来替换它?

编辑:对不起,这没问题吗?

1 个答案:

答案 0 :(得分:1)

在scipy中使用您的符号和二项式系数函数计算的概率如下:

scipy.special.binom(deckNo-cardsNo,cardsDrawn -cardNo)/scipy.special.binom(deckNo,cardsDrawn)

请注意,我计算的上述表达式的简化版本对我来说效果不错,因为我认为python在管理阶乘方面遇到了麻烦,并且使用二进制函数做得更好。