因此该程序大部分时间都按预期工作。当只有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)
这是我用于概率的方法的错误吗?如果是这样,我应该用什么来替换它?
编辑:对不起,这没问题吗?答案 0 :(得分:1)
在scipy中使用您的符号和二项式系数函数计算的概率如下:
scipy.special.binom(deckNo-cardsNo,cardsDrawn -cardNo)/scipy.special.binom(deckNo,cardsDrawn)
请注意,我计算的上述表达式的简化版本对我来说效果不错,因为我认为python在管理阶乘方面遇到了麻烦,并且使用二进制函数做得更好。