본문 바로가기
유용한기술

python 로또 번호 생성기

by DuncanKim 2022. 4. 18.
728x90

for 반복문을 배우면 언어를 불문하고 코린이라면 누구든 한 번쯤 보았을 문제!

바로 'random'의 특징과 부동 소수점 곱하기를 활용한 로또번호 생성기 만들어보기.

 

보통의 문제는 다음과 같죠.

import random
a = 0
x = []
for i in range(6):
    a = random.randint(1, 45)
    x.append(a)
x.sort()
print(x)

이렇게 랜덤으로 생성된 정수 중 하나를 리스트에 넣고 출력시키는 방식으로 하면 대부분 해결이 되죠.

뭐, 여기에 5개 세트의 게임을 출력하라던지, 아니면 게임 수를 입력받아서 출력시키는 방법도 더해질 수 있습니다.

 

위의 코드를 실행하면 다음과 같이 됩니다.

 

로또 번호 같은 것이 생성이 되었습니다.

 

하지만 마스터가 꿈인 라마스떼는 갑자기 궁금해졌습니다.

로또 추출 자체는 독립사건이지만, 여기에 통계를 대입해서 풀어볼 수 있을까? 하는 생각을 말이죠.

 

구현해할 것은 다음과 같습니다.

 

더보기

1. 5,000원 어치의 로또 복권을 사고 싶다.

2. 로또는 한 게임 당 1,000원이다.

 

3. 한 게임 당 구현하여야 하는 로직은 다음과 같다.

- 10,000,000개의 랜덤 번호를 생성한다.

- 그 중 가장 많이 생성된 상위의 6개의 숫자를 골라서 추출한다.

- 보기 좋게 오름차순으로 정렬하여 리스트 형태로 5번의 게임을 프린트한다.

 

 

## 나의 코드와 발상의 과정

import random

print("이번주 번호는 다음과 같습니다.")

# 5번의 게임을 반복하는 반복문
for h in range(5):

# loop 숫자 만큼의 랜덤 번호를 생성함.
    loop = int(10000000)
    randomlist = list()
    for i in range(loop):
        c = int(random.random()*45)
        randomlist.append(c)

# 0~44의 숫자가 생성된 횟수를 센 딕셔너리 생성(key = 번호 / value = 생성된 횟수)
    countlist = dict()
    for j in range(44):
        countlist[j] = randomlist.count(j)

# 생성된 횟수를 value를 기준으로 내림차순 정렬함(람다 사용)
    arraylist = list()
    arraylist = sorted(countlist.items(), key=lambda x: x[1], reverse=True)

# 리스트 안에 튜플 쌍으로 (key, value) 가 들어가있음.
# 앞에서 6번째 까지의 arraylist에 들어가있는 k번째 튜플의 0번째 값
# 즉 countlist의 key값(로또 번호)만을 출력하며 recommendlist에 삽입
# randomlist에서 만들어진 로또 번호는 0~44이므로 36번째 라인에서 + 1 함

    recommendlist = list()
    for k in range(6):
        recommendlist.append(arraylist[k][0]+1)

딕셔너리의 특징을 조금 활용해봤습니다.

randomlist에서 count()를 활용하여 따로 리스트를 생성하고 그곳에 넣은 다음 인덱스를 추출하는 방법도 있는데,

딕셔너리를 공부하던 터라 key와 value의 특성을 활용해보았지요.

 

이렇게 하면 게임당 10,000,000번의 추출에서 가장 많이 추출된 6가지의 번호 만을 추려

로또 수동을 긁어볼 수 있습니다.

 

 

....

다만 제가 해봤는데요.

정말 단 한 게임도 맞지 않았습니다.

 

로또 코딩은 이제 그만!

알고리즘 개념 탑재하러 갑니다.

728x90

댓글