[Python/미니프로젝트] 로또 시뮬레이션 | randint , 사용자 정의 함수, 모듈

sun_U·2023년 1월 28일
0

프로젝트

목록 보기
1/2
post-thumbnail

🎰 로또 시뮬레이션

[코드잇] 파이썬 응용하기

[미니 프로젝트]
본 프로젝트는 모듈, 사용자 정의 함수 개념을 적용해 로또 시뮬레이션을 해보는 것으로 코드잇 파이썬 응용하기 과정에 나와 있다.

1. 번호 뽑기

  • generate_numbers(n)
  • 파라미터로 정수 n개를 받아 1~45 사이의 숫자를 중복없이 n개를 뽑아 그 숫자들이 담긴 리스트를 리턴하는 함수 생성
from random import randint

def generate_numbers(n):
    n_list = []    #리턴할 리스트 생성
    i = 0
    while i < n:
        num = randint(1,45)
        if num not in n_list:    #리스트에 숫자가 없는 경우 리스트에 추가
            n_list.append(num)
            i += 1
            
    return n_list

테스트 결과

2. 당첨 번호 뽑기

  • draw_winning_numbers()
  • 일반 당첨 번호 6개와 보너스 번호 1개가 포함된 리스트를 리턴하는 함수 생성
  • 당첨 번호 6개 정렬 후 보너스 번호 추가하기
from random import randint

def draw_winning_numbers():
    winning_list = []
    i = 0
    while i < 7:
        num = randint(1,45)
        if num not in winning_list:
            winning_list.append(num)
            i += 1
        if i == 6: #당첨 번호 6개 정렬
            winning_list.sort()
        
    return winning_list

테스트 결과

++ 간단하게 만들기
generate_numbers() 함수를 사용해 더 간단한 함수 생성

def draw_winning_numbers():
    winning_numbers = generate_numbers(7)
    return sorted(winning_numbers[:6]) + winning_numbers[6:]

3. 겹치는 번호 개수

  • count_matching_numbers(numbers, winning_numbers)
  • 참가자가 뽑은 6개 번호와 당첨 번호 6개 중 겹치는 번호 개수를 리턴하는 함수 생성
def count_matching_numbers(numbers, winning_numbers):
    count = 0
    for i in winning_numbers:
        if i in numbers: 
            count += 1
    return count

테스트 코드

4. 당첨금 확인

  • check(numbers, winning_numbers)
  • 당첨 금액을 리턴하는 함수 생성
  • 당첨금 액수
  1. 내가 뽑은 번호 6개와 일반 당첨 번호 6개 모두 일치 (10억 원)
  2. 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치, 그리고 내 번호 1개와 보너스 번호 일치 (5천만 원)
  3. 내가 뽑은 번호 5개와 일반 당첨 번호 5개 일치 (100만 원)
  4. 내가 뽑은 번호 4개와 일반 당첨 번호 4개 일치 (5만 원)
  5. 내가 뽑은 번호 3개와 일반 당첨 번호 3개 일치 (5천 원)
def check(numbers, winning_numbers):
    matching_cnt = count_matching_numbers(numbers, winning_numbers[:-1]) #보너스 번호를 제외하고 번호 비교
    
    if matching_cnt == 6:
        prize_money = 1000000000
    elif matching_cnt == 5 and winning_numbers[6] in numbers: #5개 + 보너스 번호 일치
        prize_money = 50000000
    elif matching_cnt == 5:
        prize_money = 1000000 
    elif matching_cnt == 4:
        prize_money = 50000 
    elif matching_cnt == 3:
        prize_money = 5000
    else:
        prize_money = 0
    return prize_money

코드잇 풀이로는 보너스 번호도 count_matching_numbers(numbers, winning_numbers) 함수를 사용해 보너스 번호 개수를 세서 1인 경우 2등이 되도록 했다.

테스트 코드

5. 합치기

  • lottery.py 파일을 만들어 앞에서 작성한 함수를 넣고 모듈로 활용
  • 코드잇에서 제공하는 lottery_driver.py 파일 다운 후 실행

    이 파이썬 코드는 lottery.py모듈에 있는 함수들을 사용해서 로또 100장 시뮬레이션을 한 후, lottery.html이라는 파일을 생성합니다. 그러기 위해서는 우선 lottery.py와 lottery_driver.py를 같은 폴더에 넣어 주세요. 그리고 나서 lottery_driver.py 파일을 실행해 보세요. 그러면 아래 이미지에 나온 것처럼, lottery.html 파일이 생성될 것입니다. - 코드잇

html로 구현하는 부분도 직접해보고 싶었지만 아직 프론트엔드 지식은 많이 부족해서 일단은 제공해준 코드로 생성된 html을 확인했다.

과연 결과는...

💩🤚 여기 있어요!
놀랍게도 100번을 실행했는데 당첨이 하나도 없다ㅋㅋㅋ


후기

html을 내가 만들지는 않았지만 파이썬 코드를 활용해서 이렇게 화면으로 보여주니까 확실히 그냥 파이썬 코드를 실행하는 것보다 훨씬 재미있다. 추가로 넣고 싶은 기능도 떠오르고, 개발 공부도 해서 언젠간 구현 해봐야지..!

+추가하고 싶은 기능

  • 당첨 번호에 실제 로또 당첨 번호 가져오기
  • 버튼 추가해서 누를 때마다 내 번호를 새로 뽑을 수 있게 만들기
  • 100번 실행하는 것 말고 한 번씩 번호를 랜덤으로 알려주고 마음에 드는 번호를 저장해서 매주 로또 번호와 비교할 수 있게 하는 기능
profile
Data Engineer AI/ Metaverse :)

0개의 댓글