2016-03-19 7 views
1

プログラムは意図したとおりに動作します。 1枚だけの違いがあると失敗するようです。たとえば、40枚のカードデッキから6枚のカードを取り出し、5枚のカードを必要とする場合は、値0を返します。Python確率プログラム - x枚のカードからx枚のカードを取り出してデッキ内のxカードから取り出した場合

これは他のケースでも機能します。たとえば、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) 

これは私が確率に使用している方法ではエラーですか?もしそうなら、どうしたらいいですか?

編集:申し訳ありませんが、これは大丈夫ですか?計算にあなたの表記とscipyのダウンロード確率で二項係数関数を使用して

+0

ハードコードされた値で問題を再現できる場合は、値の取得方法を含めないでください。あなたがそれらをどうやって得るかは重要ではありません。 – zondo

+1

zondoが言っていることは、この例は[mcve]ではないということです。試してみるために独自のコードを書く必要があります。少なくともcalcOddsを呼び出す関数を書く必要があります。助けを得るための最善の方法は、MCVEについて読んだり、投稿したりすることです。短くてカット&ペーストで十分であることを知っています。 – GreenAsJade

答えて

0

は以下の通りです:

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

はちょうど私が計算上式の簡易版は、私のように私のために正常に動作しないことに注意してくださいPythonは階乗を管理するのに問題があり、binom関数を使ってはるかに良い仕事をしていると仮定します。

関連する問題