파이썬[Python]

[파이썬/Python] 로또 번호 시뮬레이션 프로젝트

연둔 2023. 11. 8. 15:27
728x90
반응형

규칙

  • 참여자는 로또 번호를 총 6개 고른다.
  • 당첨 번호는 총7개이다. 6개가 일반 당첨 번호이고, 1개는 보너스 번호이다.
  • 당첨금액 규칙은 아래와 같다.
    1. 일반 당첨 번호 6개 모두 일치: 10억원
    2. 일반 당첨 번호 5개 일치 그리고 보너스 번호 1개 일치: 5천만원
    3. 일반 당첨 번호 5개 일치: 1백만원
    4. 일반 당첨 번호 4개 일치: 5만원
    5. 일반 당첨 번호 3개 일치: 5천원

 

필요 함수들

  • 랜덤 로또 번호 추출
  • 당첨 로또 번호 추출
  • 랜덤 로또 번호와 당첨 로또 번호 중 일치하는 번호 개수 추출
  • 당첨 금액 추출

 

랜덤 로또 번호 추출 함수

def generate_numbers(n):
    numbers = []
    i = 0
    while i < n:
        number = random.randint(1, 45)
        if number not in numbers:
            numbers.append(number)
            i += 1
    return numbers

 

추출한 로또 번호를 담을 numbers 리스트를 생성한다. while문은 6개의 번호가 추출될 때까지 진행한다. for문을 쓰지 않은 이유는 중복된 번호가 랜덤으로 추출될 시 다시 뽑아야 하기 때문이다. 

 

당첨 로또 번호 추출 함수

def draw_winning_numbers():
    winning_numbers = []
    i = 0
    while i < 6:
        number = random.randint(1, 45)
        if number not in winning_numbers:
            winning_numbers.append(number)
            i += 1
    winning_numbers.sort()
    while True:
        bonus_number = random.randint(1, 45)
        if bonus_number not in winning_numbers:
            winning_numbers.append(bonus_number)
            break
    return winning_numbers

 

당첨 로또 번호를 담을 winning_numbers 리스트를 생성한다. 일반 당첨 번호 6자리를 먼저 추출한 후 정렬한다. 정렬 후에 보너스 당첨 번호를 추출한다. 

 

보너스 번호 추출은 중복되는 번호가 나올 수 있기 때문에 무한루프를 생성시키고 겹치지 않는 번호가 나올 시 break문으로 빠져나온다.

 

일치하는 번호 개수 추출 함수

def count_matching_numbers(list_1, list_2):
    count = 0
    for i in list_1:
        for j in list_2:
            if i == j:
                count += 1
    return int(count)

 

파라미터로 내 로또 번호와 당첨 로또 번호를 받는다. 이중 for문을 통해 탐색하며 일치하는 로또 번호 개수를 추출한다.

 

당첨 금액 추출 함수

def check(my_numbers, winning_numbers):
    same_count = 0
    for i in my_numbers:
        for j in winning_numbers[:6]:
            if i == j:
                same_count += 1

    if winning_numbers[-1] in my_numbers:
        bonus_check = True
    else:
        bonus_check = False

    if same_count == 6:
        return int(1000000000)
    elif same_count == 5 and bonus_check == True:
        return int(50000000)
    elif same_count == 5:
        return int(1000000)
    elif same_count == 4:
        return int(50000)
    elif same_count == 3:
        return int(5000)
    else:
        return int(0)

 

먼저 보너스 번호를 제외한 6개의 번호를 비교하여 일치하는 번호 개수를 same_count에 넣는다.

그 후 보너스 번호가 존재하면 bonus_check를 True로 하고 그렇지 않으면 False로 지정한다.

 

규칙을 반영하여 당첨금액을 리턴한다.

 

전체 코드

import random
def generate_numbers(n):
    numbers = []
    i = 0
    while i < n:
        number = random.randint(1, 45)
        if number not in numbers:
            numbers.append(number)
            i += 1
    return numbers


def draw_winning_numbers():
    winning_numbers = []
    i = 0
    while i < 6:
        number = random.randint(1, 45)
        if number not in winning_numbers:
            winning_numbers.append(number)
            i += 1
    winning_numbers.sort()
    while True:
        bonus_number = random.randint(1, 45)
        if bonus_number not in winning_numbers:
            winning_numbers.append(bonus_number)
            break
    return winning_numbers


def count_matching_numbers(list_1, list_2):
    count = 0
    for i in list_1:
        for j in list_2:
            if i == j:
                count += 1
    return int(count)


def check(my_numbers, winning_numbers):
    same_count = 0
    for i in my_numbers:
        for j in winning_numbers[:6]:
            if i == j:
                same_count += 1

    if winning_numbers[-1] in my_numbers:
        bonus_check = True
    else:
        bonus_check = False

    if same_count == 6:
        return int(1000000000)
    elif same_count == 5 and bonus_check == True:
        return int(50000000)
    elif same_count == 5:
        return int(1000000)
    elif same_count == 4:
        return int(50000)
    elif same_count == 3:
        return int(5000)
    else:
        return int(0)

my_numbers = generate_numbers(7)
winning_numbers = draw_winning_numbers()
matching_numbers = count_matching_numbers(my_numbers, winning_numbers)
winning_amount = check(my_numbers, winning_numbers)

print('로또 번호 추출: {}'.format(my_numbers))
print('로또 당첨 번호: {}'.format(winning_numbers))
print('일치하는 번호 개수: {}'.format(matching_numbers))
print('당첨금 액수: {}'.format(winning_amount))

 


위 코드는 이상적인 코드가 아닌 개인적으로 작성한 코드이기 때문에 오류가 있거나 비효율적인 코드가 있을 수 있습니다 ㅠ

728x90
반응형