
파이썬 로또 번호 추출기 및 시뮬레이터 만들기
원래 로또에 관심이 없었지만 이번에 런닝을 하다 새똥을 맞은 날 로또를 샀더니 5등이 당첨됐습니다. 물론 5등이 될 확률은 높은 편이지만 5등이 되는 바람에 또 로또를 살 일이 생겨버렸죠.
로또 1등이 될 확률은 800만분의 1이 넘는다고 해서 한번 직접 시뮬레이터를 만들어서 테스트를 해봤습니다. 시뮬레이터는 실제로 로또 번호를 뽑는 것보다 아주 조금 더 확률을 높여서 코드를 작성했습니다. 통계적으로 봤을 때 가장 첫번째 번호는 노란색인 경우(1~10번)가 많다는 점과 가장 마지막 번호는 30 후반대 번호부터 40번대 번호가 많은 것을 고려하여 작성을 했는데 어쨌든 확률이 매우 낮은 것은 마찬가지입니다.
import random import sys LCount = 0 while True: MatchNumber = 0 LottoList = [] # 5개의 랜덤번호 생성 while len(LottoList) != 5: Lotto = random.sample(range(1, 46), 6) Lotto.sort() if Lotto[0] < 11: if Lotto[5] >= 38: LottoList.append(Lotto) LCount += 1 # 1개의 당첨번호 생성 while True: TestNum = random.sample(range(1, 46), 6) TestNum.sort() if TestNum[0] < 11: if TestNum[5] >= 38: break # 생성한 5개 랜덤번호와 1개의 당첨번호 대조 for i1 in LottoList: for i2 in range(6): if i1[i2] == TestNum[i2]: MatchNumber += 1 if MatchNumber == 6: print(f'{i1} 1등 당첨!') print(f'총 5게임 {LCount}번 구매') input() sys.exit() if MatchNumber == 5: print(f'{i1} 5개 일치!') print(f'총 5게임 {LCount}번 구매') MatchNumber = 0
먼저 로또 당첨 시뮬레이터는 위와 같습니다. 구조는 매우 간단하죠. 먼저 반복문에서는 한번 돌 때마다 5개의 게임과 1개의 당첨번호를 랜덤으로 생성합니다. 매주 5게임(5천원)을 구매하면서 그 주의 새로운 당첨번호와 대조를 하는 방식이라고 보면 될것 같은데 확률을 조금 올렸는데도 불구하고 아주 무시무시한 극악의 확률을 자랑합니다. 1등 당첨까지 총 5번의 테스트를 해봤는데 결과는 다음과 같습니다.
[5, 11, 32, 33, 37, 45] 1등 당첨! 총 5게임 1528289번 구매 [1, 3, 10, 23, 34, 44] 1등 당첨! 총 5게임 283276번 구매 [1, 9, 13, 27, 30, 41] 1등 당첨! 총 5게임 579907번 구매 [5, 11, 26, 27, 37, 43] 1등 당첨! 총 5게임 기준 1624183번 구매
반복이 될 때마다 새로운 5개의 랜덤번호와 1개의 당첨번호를 생성하면서 대조작업을 한 결과입니다. 실제상황이라고 했을 때 금액이나 기간적으로 당첨은 거의 불가능에 가까운 수치라고 볼 수 있겠죠. 그럼에도 불구하고 매주 당첨자가 나오고 있습니다. 그래서 우리는 벼락 맞을 확률보다도 낮은 1등을 기대하며 매주 로또를 사는 것은 아닐까요.. 슬픈 현실입니다.
import random """ Lotto Number Generator Num 1 = 11 Down Num 2 = None Num 3 = None Num 4 = None Num 5 = None Num 6 = 38 ~ 45 """ LottoList = [] while len(LottoList) != 10: Lotto = random.sample(range(1, 46), 6) Lotto.sort() if len(LottoList) + 1 == Lotto[0]: if Lotto[5] >= 38: LottoList.append(Lotto) for i in LottoList: print(i)
로또 시뮬레이터에 비해서 로또 번호 추출기는 더 간단하게 코드를 짤 수 있습니다. 그래봤자 랜덤 번호를 추출하는 정도 밖에 안되니까요. 위 코드는 총 10개의 게임을 랜덤으로 생성합니다. 거기서 추가되는 옵션이 몇가지 있는데 우선 총 10개의 게임의 첫번째 숫자는 1부터 10까지 겹치지 않게 하나씩 나와야 한다는 것이고 마지막 숫자는 38에서 45 사이일 때 리스트에 추가를 하도록 코드를 작성했습니다.
[1, 13, 19, 30, 37, 42] [2, 7, 8, 9, 10, 42] [3, 4, 18, 30, 36, 41] [4, 6, 8, 16, 30, 44] [5, 8, 16, 20, 34, 41] [6, 25, 31, 33, 37, 43] [7, 16, 25, 40, 42, 44] [8, 20, 25, 28, 43, 45] [9, 10, 13, 39, 40, 44] [10, 20, 24, 25, 41, 44] Process finished with exit code 0
특별히 로또를 분석하면서 코드를 짠 것은 아니기 때문에 이런식으로 간단하게 만들 수 있다는 것만 참고하면 될 것 같습니다. 참고로 이 방법으로 1번에서 5번까지 5게임 사자마자 5천원 당첨이 됐네요. 본전치기에 5등은 흔한 일이겠지만~ 먼 훗날의 1등을 기원하며..
'파이썬 프로그래밍' 카테고리의 다른 글
파이썬 엑셀 업무 자동화를 위한 샘플 프로그래밍 (0) | 2022.10.01 |
---|---|
파이썬 셀레니움 크롬 프로필 생성 및 쿠키 사용하기 (0) | 2022.10.01 |
파이썬 셀레니움 네이버 뉴스기사 제목 크롤링 (0) | 2022.10.01 |
파이썬 업비트 비트코인 자동매매 - 코인 가격 변동성 체크하기 (0) | 2022.10.01 |
파이썬 업비트 비트코인 자동매매 – 매수 매도 자동화 (1) | 2022.10.01 |