본문 바로가기
Python

[파이썬] 로또 시뮬레이션 생성기

by 퍼포먼스마케팅코더 2022. 8. 19.
반응형

파이썬 로또 시뮬레이션 생성기

이거는 로또 시뮬레이션으로 재미 삼아서 만들어본 건데 참고로만 아까 보시면 될 것 같아요. 로또를 해서 6개의 랜덤 당첨 번호 보너스 번호 이러한 것들을 아까 만들어 놔서 그거에 따라서 등수를 반환을 해놓고 로또 횟수에 따라서 구매에 시뮬레이션을 작동해서 돌려보는 그거예요. 로또 시뮬레이션을 한번 재미 하면서 돌려볼 수 있는 그런 코딩이라고 보시면 될 것 같습니다.

 

그래서 그렇게 어려운 내용이라기보다는 재미 삼아서 만들어서 할 수 있는 정도 그걸로 보시면 될 것 같고요. 제가 충격으로 먹었던 거는 이걸 돌려봤었었는데 표본이 커지면 커질수록 기대값이라는 게 정해지지 않습니까 5등 당첨될 확률 5천원 로또를 당첨될 확률이 한 2.3% 정도가 나왔습니다. 그리고 4등 5만 원이죠. 로또 4등에 당첨될 확률이 한 0.3% 정도였어요. 어마무시하게 적은 확률인 거죠. 저도 몰랐었는데 이거 로또 시뮬레이션을 이거 만들어 보면서 그때 충격을 먹었더라고요 유용하게 이거를 재미 삼아서 보셔서 하시면 될 것 같고요 크게 어려운 내용은 없고 재미 삼아서 한 번씩 해보시면 괜찮을 것 같습니다.

 

import numpy as np

numbers = np.random.choice(np.arange(1, 46), 7, replace = False) # 1~45 중 7개 추출

win_numbers = numbers[:-1] # 당첨 번호 6개
bonus = numbers[-1] # 보너스 번호

print(win_numbers) # [38 42 13 41 44 11]
print(bonus) # 31
def lotto(my_num, win_numbers, bonus):
    same_cnt = 0 # 일치하는 개수

    for num in win_numbers: # 각 당첨 번호 포함 여부 체크 
        if num in my_num: same_cnt += 1
    
    # 등수 반환
    if same_cnt == 6: return 1
    elif same_cnt == 5 and bonus in my_num: return 2
    elif same_cnt == 5: return 3
    elif same_cnt == 4: return 4
    elif same_cnt == 3: return 5
    else: return 6 # 꽝

# 예시 상황
my_num = [38, 35, 11, 10, 40, 42]
print(lotto(my_num, win_numbers, bonus)) # 5
lotto_cnt = 1000000 # 구매할 로또의 개수

# 당첨 번호 및 보너스 번호 추출
numbers = np.random.choice(np.arange(1, 46), 7, replace = False)
win_numbers = numbers[:-1]
bonus = numbers[-1]

history = [0] * 7 # i번 인덱스에 i등 횟수 기록(0번 인덱스는 사용 X)

# 로또 구매 시뮬레이션
for i in range(lotto_cnt):
    my_num = np.random.choice(np.arange(1, 46), 6, replace = False) # 1~45 중 6개 추출
    result = lotto(my_num, win_numbers, bonus) # 등수 반환
    history[result] += 1 # 결과 기록

# 결과 출력
for i in range(1, 6):
    print('%d등,%d'%(i, history[i]))
print('꽝 횟수, %d회'%history[-1])
반응형

댓글