본문 바로가기
개발일지/Python

[복기 및 활용코드] 파이썬 확률 코드 (매우 중요)

by 다니엘의 개발 이야기 2022. 5. 2.
320x100
# 확률

# 순열은 순서가 고정된 확률의 느낌이고
# 확률은 순서가 무작위적인 확률의 느낌이다.

# 10개중에 6개의 꽝을 뽑을 확률 -> 10C6
# 6개의 꽝 중에서 3개의 꽝을 뽑을 확률 -> 6C3
# 10개의 카드중에서 4장이 당첨카드다.
# [전체의 경우의 수] 위의 조건과 같은 경우에 대괄호 같이 만들어지는 확률이 10C6이고 (10개의 카드 중에서 6개의 꽝을 뽑을 확률)
# 중괄호 같이 만들어 지는 확률이
# 1) [특정 경우의 수] 6개의 꽝 중에서 3장을 뽑을 확률 -> 6C3
# 2) [특정 경우의 수] 4장의 당첨 중에서 3장을 뽑을 확률 -> 4C3

#1 확률을 구하기 위해서는 순열이 필요하다.
#2 때문에 아래와 같이 순열을 구하는 공식을 함수화 시킨 후 에 확률을 구해준다.
#3 음... 좀 더 정확히는 팩토리얼(순열에 해당하는) -> 순열 -> 조합 -> 확률 순인 것 같다.
def proFun():


    numN = int(input('numN 입력: '))
    numR = int(input('numR 입력: '))

    resultP = 1
    resultR = 1
    resultC = 1

    # 순열(P)
    for n in range(numN, (numN - numR), - 1):
        resultP *= n

    print('순열 resultP: {}'.format(resultP))

    # R에 대한 팩토리얼

    for i in range(numR, 0, -1):
        resultR *= i
    print(f'R에 대한 팩토리얼 resultR: {resultR}')

    # 조합(C)
    resultC = int(resultP / resultR)
    print(f'조합 resultC: {resultC}')

    return resultC

sample = proFun()

#0 확률 전체 구하는 순서.
#1 10C6에 대한 조합, 210이 나온다. N값은 10, R값은 6
print(f'sample: {sample}')

#2 6C3에 대한 조합. (꽝 중의 꽝), 20이 나온다.
event1 = proFun()
print(f'event1: {event1}')

#3 4C3에 대한 조합. (당첨 중의 당첨), 4가 나온다.
event2 = proFun()
print(f'event2: {event2}')

# 이 함수를 돌려가면서 얻는 수식 중 중요 정보는 "조합"에 해당하는 "resultC"

#4 여태까지 누적된 1,2,3에서 뽑힌 "조합을 토대로 "확률"을 구하는 계산식
probability = (event1 * event2) / sample
print('probability: {}%'.format(round(probability * 100, 2)))
300x250