2016-03-19 36 views
1

Program çoğu zaman amaçlandığı gibi çalışır. Sadece 1 kart fark olduğunda başarısız gibi görünüyor. Örneğin, 40 kart destesinden 6 kartın çizilmesi ve 5 özel kartın istenmesi, bu "0" değerini döndürür.Python Olasılık Programı - Güvertede x kartlarından alınan x kartlarından x kart çekme olasılığı

Diğer durumlarda çalışır. Örneğin, 3 özel kart isteyerek, 40'lık bir desteden 5 kart çekmek, 1/988

cevabını döndürür. Tüm kartlar birbirinden benzersiz ve bireyseldir.

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) 

Bu, olasılık için kullanıyorum yöntemiyle ilgili bir hata mı? Eğer öyleyse ne ile değiştirmeliyim?

DÜZENLEME: Bunun için üzgünüz, sorun değil mi? senin notalarını ve hesaplamak için scipy olasılık binom katsayısı işlevinin kullanılması

+0

Sorunu kodlanmış değerler ile yeniden üretebilirseniz, lütfen değerleri nasıl aldığınızı eklemeyin. Onları nasıl aldığınızın önemi yok ... eğer onları nasıl aldığınızın önemi yoksa. – zondo

+1

Ne zondo söylemeye çalışıyor, bu örneğin bir [mcve] değil. Denemek için kendi kodumuzu yazmamız gerekiyor - en azından calcOdds'ı çağırmak için bir işlev yazmamız gerekiyor. Yardım almanın en iyi yolu, MCVE hakkında okumak ve bir mesaj göndermek: eğer doğru yaptıysanız, kısa ve kesik ve yapıştırmanın sorunu göstermesi için yeterli olduğundan emin olursunuz. – GreenAsJade

cevap

0

şudur:

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

Tıpkı hesaplanan yukarıdaki ifadenin basitleştirilmiş versiyonu I olarak benim için iyi çalışmıyor fark Python'un, faktoriyelleri yönetme konusunda sıkıntıları olduğunu ve binom işlevlerini kullanarak çok daha iyi bir iş çıkardığını varsayalım.