이 문제를 해결하기위한 코드를 작성 중입니다 :복권 확률 파이썬 코드
귀하와 귀하의 친구들은 브로드 웨이 뮤지컬을 보러 갈 계획입니다. 불행히도, 뉴욕은 뉴욕으로, 표는 조금 비싸다. 그러나 쇼 중 하나에는 당신과 같은 미숙 한 사람들이 좋은 자리에 약간 저렴한 티켓을 살 권리를 얻을 수있는 티켓 복권이 매일 밤 있습니다. 추첨은 다음과 같이 운영됩니다. 첫째, 관심있는 모든 사람들이 추첨에 들어갑니다. 그런 다음 행운의 당첨자가 그려지고 각각은 t 표를 사기 위해 제공됩니다.
귀하의 그룹에 속한 사람들의 수 (모두 추첨에 들어 갔음)와 복권에 입사 한 총인수 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)
내가 그것을 실행하려고하지만 결과는 잘못 나왔다. 예를 들어, 조합이 (100,10,2,1)이면 결과는 0.1이어야합니다. 대신에 1을 반환했습니다. 누군가 나를 도와 줄 수 있다면 정말 고맙습니다.
.... – jdotjdot
정수 나누기를 itertools.combinations'로 보일 것입니다 –
@LongPham은 "itertools가 정수 나누기에 대해 작동하지 않는다고 생각"하는 것에 대해 더 구체적으로 설명 할 수 있습니까? 'itertools.combinations()'에 대한 코멘트는 나눗셈과 관련된 것을 언급하지 않습니다. – Matt