로또 프로그램 만들기 6탄 – 특정 번호를 포함 하는 번호 조합을 생성하는 방법

0

오늘은 파이썬(Python)언어로 특정 번호를 포함하는 로또 번호 생성방법에 대해 알아봅니다. 가령, 나는 3번과 7번은 포함하고 나머지 4개의 번호에 대해서 랜덤으로 뽑는 경우를 생각해볼 수 있습니다. 오프라인에서 로또용지에 번호 3번과 7번만 마킹하고 자동에 마킹하면 로또 구입 용지에 반자동으로 찍혀 나오는 원리와 같습니다. 그럼 시작해볼까요? 첫번째 시간에 했던 코드를 응용합니다. 아래 코드는 첫 시간에 했던 6개의 번호를 뽑는 코드입니다.

import random

#뽑은 번호를 담은 리스트 선언
my_number = []

#반복문으로 6개뽑을때까지만 반복처리
while len(my_number) < 6:
    a = random.randint(1, 45)
    # 중복되는 번호가 아닌 경우에만 추가
    if a not in my_number:
        my_number.append(a)

my_number.sort()

# 뽑은 번호 6개 출력하기
print(f'{my_number}')

위 코드를 보시면 6개의 번호를 뽑는 과정에 기존에 뽑은 번호와 비교해서 같지 않으면 리스트에 추가하는 구조로 되어있습니다. 이 코드를 사용하여 특정번호 포함하는 코드를 만들어봅니다. 원리는 간단합니다. my_number에 포함하고 싶은 번호를 append함수를 사용하여 추가합니다. 그리고 난 후 my_number 리스트의 사이즈를 체크 후 나머지 뽑아야할 갯수 만큼만 반복문을 돌려서 처리해주면 됩니다. 아래 코드를 볼까요?  

포함하고 자하는 번호로 7번과 20번을 추가해주었습니다. 

import random

#뽑은 번호를 담은 리스트 선언
my_number = []

#포함하고자 하는 번호를 추가.
my_number.append(7)
my_number.append(20)
 
# 반복문으로 6개뽑을때까지만 반복처리
while len(my_number) < 6:
    a = random.randint(1, 45)
    # 중복되는 번호가 아닌 경우에만 추가
    if a not in my_number:
        my_number.append(a)

my_number.sort()

# 뽑은 번호 6개 출력하기
print(f'{my_number}')

[실행결과]

[1, 7, 20, 25, 29, 41]

포함할 번호를 추가할 때 append함수를 사용하지 않고 리스트를 처음에 선언할 때 초기값으로 넣어주어도 됩니다. 아래 코드처럼요. 3개의 포함해야할 번호를 추가해주었습니다. 실행결과를 보면 3개의 번호를 포함 후 나머지 3개의 번호를 뽑은 것을 확인할 수 있습니다.

my_number = [7, 20, 30]
import random

#뽑은 번호를 담은 리스트 선언
my_number = [7, 20, 30]

# 반복문으로 6개뽑을때까지만 반복처리
while len(my_number) < 6:
    a = random.randint(1, 45)
    # 중복되는 번호가 아닌 경우에만 추가
    if a not in my_number:
        my_number.append(a)

my_number.sort()

# 뽑은 번호 6개 출력하기
print(f'{my_number}')

[실행결과]

[1, 7, 20, 30, 38, 45]

 

7,20,30번을 포함하는 로또번호 조합을 반복문인 for문을 사용하여 5개 정도만 뽑아볼까요? 실행결과를 보세요? 동일한 번호로 5개의 조합이 생성되었어요. 왜그런 것일까요? 정답은 아래쪽에 있습니다.

import random

#뽑은 번호를 담은 리스트 선언
my_number = [7, 20, 30]

for num in range(5):
    # 반복문으로 6개뽑을때까지만 반복처리
    while len(my_number) < 6:
        a = random.randint(1, 45)
        # 중복되는 번호가 아닌 경우에만 추가
        if a not in my_number:
            my_number.append(a)

    my_number.sort()

    # 뽑은 번호 6개 출력하기
    print(f'{my_number}')

[실행결과]

[7, 12, 20, 30, 34, 35]
[7, 12, 20, 30, 34, 35]
[7, 12, 20, 30, 34, 35]
[7, 12, 20, 30, 34, 35]
[7, 12, 20, 30, 34, 35]

 

이유를 찾으셨나요? 그 이유는 my_number의 값을 초기화 하지않은 상태에서 재사용했기 때문입니다.

for문 안쪽에 my_number 리스트를 초기화 해주는 코드가 한 줄 들어가야합니다. 실행결과를 보니 모두 다른 조합으로 5개의 로또 번호가 생성되었습니다.

import random

#뽑은 번호를 담은 리스트 선언
my_number = [7, 20, 30]

for num in range(5):
    my_number = [7, 20, 30]

    # 반복문으로 6개뽑을때까지만 반복처리
    while len(my_number) < 6:
        a = random.randint(1, 45)
        # 중복되는 번호가 아닌 경우에만 추가
        if a not in my_number:
            my_number.append(a)

    my_number.sort()

    # 뽑은 번호 6개 출력하기
    print(f'{my_number}')

[실행결과]

[7, 13, 20, 23, 30, 38]
[7, 10, 20, 30, 35, 36]
[1, 3, 6, 7, 20, 30]
[7, 20, 25, 26, 30, 35]
[7, 14, 20, 26, 30, 44]

오늘은 여기까지!!! 다음주에 또 만나요!!

 

[이전 글]

 

Leave a Reply