본문 바로가기

카테고리 없음

[python] 로또 번호 자동 생성 스크립트 만들어보기

반응형

 

 

아마 파이썬으로 접하기 가장 쉬운 프로그램 중 하나는 바로 로또 번호 생성기일 것이다.

로또 번호를 생성하는 원리와 이를 코드로 구현하는 방법을 차근차근 알아보자.

 

혹시라도 완성된 코드만 궁금하시다면 맨 밑으로 스크롤 하여 '완성된 코드'를 참고해주세요

 

 

 


 

로또 번호 생성 원리

 

조건

1. 6개의 로또 번호는 1부터 45개의 숫자중 하나로 이뤄진다.
2. 중복 입력은 안된다. 
(선택) 3. 로또번호는 오름차순이다.

 

-> 이를 코드로 구현해보자

 

 

random 함수 - 아무거나 골라줘

- 조건 1번은 1-45 중 아무거나 하나를 고르는 것이다.

- 파이썬에는 아무거나 하나 골라주는 random 함수가 있다.

 

>>> import random
>>> random.random()
0.9846643134791911


# 1부터 46 미만의 숫자 중 아무 숫자나 하나 가져오기
>>> random.randrange(1,46)
39
>>> random.randrange(1,46)
15
>>> random.randrange(1,46)
5
>>> 
>>> random.randrange(1,46)
41
>>> random.randrange(1,46)
9

 

생각보다 1번 조건에 대한 문제는 쉽게 해결되었다

 

하지만 아래와 같은 문제가 남았다.

 

  • 총 6개의 완성된 숫자를 어디에 담을 것인지?
  • 중복은 안되게 하려면 어떻게 해야하나?
  • 오름차순으로 하려면?

 

반복문을 통해 코드 개선

import random

# lotto.py에 아래 코드 작성후 
for i in range(6):
    random_val = random.randrange(1,46)
    print(random_val)



# 터미널에서 아래 명령어를 수행해보자.
# python3 lotto.py
32
1
41
13
1
10

 

반복적으로 생성된 숫자를 리스트에 담아보자.

 

import random

# 로또 번호를 담을 리스트 초기화
lotto_number = []

for i in range(6):
    random_val = random.randrange(1,46)

    print(f"{i}번째 숫자 {random_val }")
    # 로또 번호 리스트에 담기
    lotto_number.append(random_val )
    
print(lotto_number)


$ python lotto.py
0번째 숫자 12
1번째 숫자 5
2번째 숫자 43
3번째 숫자 19
4번째 숫자 19
5번째 숫자 43
[12, 5, 43, 19, 19, 43]

 

그럼 이제 두가지 처리가 남았다.


    - 중복이 되면 안되고
    - 오름차순이어야 한다.

 

 

 

중복값 처리

- 중복 처리를 위해 가장 쉽게 생각할 수 있는건
- ‘예전에 해당 값이 나왔으면 다시 추첨을 하자’라는 것이다.
- 이를 프로그래밍에 구현해보자.

 

import random

# 로또 번호를 담을 리스트 초기화
lotto_number = []

for i in range(6):
    random_val = random.randrange(1,46)

    # num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
    # 없을때 까지 반복한다.
    while random_val in lotto_number:
        print(f"{num}은 이미 뽑혀서 다시 추첨하자")
        random_val = random.randrange(1,46)

    lotto_number.append(random_val )
    print(f"{i}번째 숫자 {random_val }")
    
print(lotto_number)




$ python lotto.py 
0번째 숫자 5
1번째 숫자 8
2번째 숫자 38
3번째 숫자 4
4번째 숫자 14
38은 이미 뽑혀서 다시 추첨하자
5번째 숫자 30
[5, 8, 38, 4, 14, 30]

 

- 이렇게까지 하면  1-45까지 숫자를 중복없이 6개 만들 수 있다.
- 그럼 이렇게 하면 우린 이미 로또 번호를 다 만든 것이나 다름없다.
- 그래도 한번 오름 차순으로 예쁘게 표현해보자.

 

 

import random

# 로또 번호를 담을 리스트 초기화
lotto_number = []

for i in range(6):
    random_val = random.randrange(1,46)

    # num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
    # 없을때 까지 반복한다.
    while random_val in lotto_number:
        print(f"{random_val}은 이미 뽑혀서 다시 추첨하자")
        random_val = random.randrange(1,46)

    lotto_number.append(random_val )
    print(f"{i}번째 숫자 {random_val}")
    
    # 오름 차순으로 정렬
    lotto_number.sort()
print(lotto_number)


$ python lotto.py 
0번째 숫자 34
1번째 숫자 7
7은 이미 뽑혀서 다시 추첨하자
2번째 숫자 11
3번째 숫자 41
4번째 숫자 2
5번째 숫자 3
[2, 3, 7, 11, 34, 41]

 

 

자 그럼 이렇게 하면 로또 번호 생성기는 완성이 되었다. 👏👏👏

 

 

완성된 코드

import random

# 로또 번호를 담을 리스트 초기화
lotto_number = []

for i in range(6):
    random_val = random.randrange(1,46)

    # num이 로또 번호에 이미 있으면 다시 random함수 호출한다.
    # 없을때 까지 반복한다.
    while random_val in lotto_number:
        random_val = random.randrange(1,46)

    lotto_number.append(random_val )
    
    # 오름 차순으로 정렬
    lotto_number.sort()
    
print(lotto_number)

 

반응형