본문 바로가기

파이썬으로 로또 1등 도전기

7일차) 로또 번호를 가져와서 특정회차 제외 번호 설정하기

728x90

안녕하세요, 여러분! 오늘은 파이썬을 사용하여 로또 번호를 가져오고, 특정 번호를 제외하는 방법에 대해 이야기해보겠습니다. 이 코드를 통해 로또 번호를 자동으로 가져오고, 원하는 번호를 제외하여 더욱 유용하게 활용할 수 있습니다.

## 코드 설명

### 1. 필요한 라이브러리 가져오기

우선, API 요청을 위해 `requests` 라이브러리와 날짜 계산을 위한 `datetime` 모듈을 가져옵니다.

import requests
from datetime import datetime



### 2. 최신 로또 회차 번호 구하기

로또는 매주 토요일에 진행되므로, 기준 날짜(2002년 12월 7일)부터 오늘까지의 경과 일수를 계산하여 최신 회차 번호를 구하는 함수를 작성했습니다.

def get_latest_draw_no():
    first_draw_date = datetime(2002, 12, 7)
    today = datetime.today()
    days_passed = (today - first_draw_date).days
    draw_no = (days_passed // 7) + 1
    return draw_no



### 3. 로또 당첨 번호 가져오기

로또 API를 통해 특정 회차의 당첨 번호를 가져오는 함수입니다. API를 호출하고 JSON 형식으로 데이터를 받아옵니다.

def get_lotto_winning_numbers(draw_no):
    url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={draw_no}"
    response = requests.get(url)
    data = response.json()
    
    if data["returnValue"] == "success":
        winning_numbers = [data[f"drwtNo{i}"] for i in range(1, 7)]
        bonus_number = data["bnusNo"]
        return winning_numbers, bonus_number
    else:
        return None, None



### 4. 제외할 번호 구하기

특정 회차의 번호를 가져온 후, 사용자가 지정한 인덱스의 번호와 보너스 번호를 제외하는 함수를 만들었습니다.

def get_excluded_numbers(latest_draw_no, offset, exclude_indices, exclude_bonus):
    target_draw_no = latest_draw_no - offset
    target_numbers, target_bonus = get_lotto_winning_numbers(target_draw_no)

    if target_numbers:
        excluded_numbers = [target_numbers[i] for i in exclude_indices]
        if exclude_bonus:
            excluded_numbers.append(target_bonus)
        
        return excluded_numbers, target_numbers, target_bonus
    else:
        return None, None, None



### 5. 코드 실행

최신 회차 번호를 구하고, 2회차 전의 번호를 가져와서 원하는 번호를 제외해 보겠습니다.

latest_draw_no = get_latest_draw_no()
print(f"오늘 날짜 기준 최신 로또 회차 번호는: {latest_draw_no}회차 입니다.")

exclude_indices = [0, 5]  # 첫 번째 숫자와 여섯 번째 숫자 제외
exclude_bonus = True  # 보너스 번호 제외

excluded_numbers, target_numbers, target_bonus = get_excluded_numbers(latest_draw_no, 2, exclude_indices, exclude_bonus)

if excluded_numbers:
    print(f"제외할 번호: {excluded_numbers}")
    print(f"{latest_draw_no - 2}회차: 당첨 번호: {target_numbers}, 보너스 번호: {target_bonus}")
else:
    print(f"{latest_draw_no - 2}회차의 데이터를 불러오지 못했습니다.")

 

 

### 전체 소스

import requests
from datetime import datetime

def get_latest_draw_no():
    # 로또 1회차 기준 날짜 (2002년 12월 7일)
    first_draw_date = datetime(2002, 12, 7)
    
    # 오늘 날짜
    today = datetime.today()
    
    # 첫 회차 기준으로 경과한 일 수 계산
    days_passed = (today - first_draw_date).days
    
    # 매주 토요일에 추첨 (7일에 한 번씩 진행되므로 7로 나눔)
    draw_no = (days_passed // 7) + 1
    
    return draw_no

def get_lotto_winning_numbers(draw_no):
    # 공공데이터포털 로또 API URL
    url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={draw_no}"
    
    # API로부터 데이터 가져오기
    response = requests.get(url)
    data = response.json()
    
    if data["returnValue"] == "success":
        # 로또 번호 출력
        winning_numbers = [data[f"drwtNo{i}"] for i in range(1, 7)]
        bonus_number = data["bnusNo"]
        return winning_numbers, bonus_number
    else:
        return None, None

def get_excluded_numbers(latest_draw_no, offset, exclude_indices, exclude_bonus):
    # 최신 회차 기준으로 offset 회차 전 번호 가져오기
    target_draw_no = latest_draw_no - offset
    target_numbers, target_bonus = get_lotto_winning_numbers(target_draw_no)

    if target_numbers:
        # 제외할 번호 설정
        excluded_numbers = [target_numbers[i] for i in exclude_indices]
        
        # 보너스 번호를 제외할지 여부 확인
        if exclude_bonus:
            excluded_numbers.append(target_bonus)
        
        return excluded_numbers, target_numbers, target_bonus
    else:
        return None, None, None

# 최신 회차 번호 계산
latest_draw_no = get_latest_draw_no()
print(f"오늘 날짜 기준 최신 로또 회차 번호는: {latest_draw_no}회차 입니다.")

# 제외할 번호 인덱스 설정 (첫 번째 숫자와 여섯 번째 숫자 제외)
exclude_indices = [0, 5]  # 0은 첫 번째, 5는 여섯 번째 번호
exclude_bonus = True  # 보너스 번호를 제외할지 여부

excluded_numbers, target_numbers, target_bonus = get_excluded_numbers(latest_draw_no, 2, exclude_indices, exclude_bonus)

if excluded_numbers:
    print(f"제외할 번호: {excluded_numbers}")
    print(f"{latest_draw_no - 2}회차: 당첨 번호: {target_numbers}, 보너스 번호: {target_bonus}")
else:
    print(f"{latest_draw_no - 2}회차의 데이터를 불러오지 못했습니다.")

 

 

### 실행 결과

이 코드를 실행하면 최신 회차 번호와 2회차 전의 당첨 번호, 그리고 제외할 번호 목록이 출력됩니다. 예를 들어:

오늘 날짜 기준 최신 로또 회차 번호는: 1141회차 입니다.
제외할 번호: [5, 40, 18]
1139회차: 당첨 번호: [5, 12, 15, 30, 37, 40], 보너스 번호: 18

 


## 마무리

이제 파이썬을 통해 로또 번호를 손쉽게 가져오고, 원하는 번호를 제외할 수 있는 방법을 알게 되었습니다. 여러분도 이 코드를 활용하여 로또 번호를 관리해 보세요!  재미있는 프로젝트가 될 것입니다. 

질문이 있으면 언제든지 댓글로 남겨주세요. 감사합니다!

728x90