본문 바로가기

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

19일차) 최신 30회차의 로또 번호에서 출현하지 않는 숫자들을 제외

 

안녕하세요, 로또 애호가 여러분! 오늘은 로또 번호를 추적하고, 최신 30회차의 로또 번호에서 출현하지 않는 숫자들을 제외하는 흥미진진한 함수 `fetch_recent_lotto_missing_numbers`를 소개할게요. 이 함수는 최신 로또 회차부터 과거 30회차의 로또 번호를 가져오고, 1부터 45까지의 숫자 중에서 우리가 놓친 숫자들을 찾아내며, 추가로 출현하지 않은 번호를 제외하는 기능까지 갖추고 있습니다. 자, 그럼 함께 코드의 세계로 들어가 볼까요? 🚀

#### 1. 최신 회차 가져오기 📅

우선, 최신 로또 회차를 가져와야 해요. 이건 `get_latest_draw_no()`라는 함수를 통해 자동으로 할 수 있어요. 이 함수가 최신 회차 번호를 알려주면, 우리는 그 번호부터 시작해서 과거 30회차의 번호를 추적할 준비를 마치게 됩니다.

current_draw = get_latest_draw_no()  # 최신 회차를 동적으로 가져옴


#### 2. 과거 로또 번호 가져오기 📜

이제, 최근 30회차의 로또 번호를 가져오기 위해 반복문을 사용해요. 이 반복문은 현재 회차부터 하나씩 줄여가며 각 회차의 로또 번호를 가져옵니다.

for i in range(current_draw, current_draw - 30, -1):
    url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={i}"
    response = requests.get(url)
    data = response.json()



여기서 `requests` 라이브러리를 사용해 로또 번호를 제공하는 API에 요청을 보내고, JSON 형식으로 응답을 받아옵니다. 응답이 성공적이면, 로또 번호를 배열에 추가하게 되죠.

if data['returnValue'] == 'success':
    numbers = [
        data['drwtNo1'], data['drwtNo2'], data['drwtNo3'],
        data['drwtNo4'], data['drwtNo5'], data['drwtNo6']
    ]
    recent_lotto_numbers.append(numbers)



#### 3. 중복 제거 및 놓친 숫자 찾기 🔍

이제, 가져온 로또 번호에서 중복된 숫자를 제거해야 해요. 여기서 `pandas`의 `unique` 함수를 사용하여 중복 없이 모든 번호를 하나의 리스트에 저장합니다.

unique_numbers = pd.unique(pd.DataFrame(recent_lotto_numbers).values.ravel()).tolist()



그리고 1부터 45까지의 모든 숫자에서, 우리가 수집한 숫자를 빼서 놓친 숫자들을 찾습니다. 여기서 추가적으로, 최신 30회차의 로또 번호에서 출현하지 않은 숫자들을 제외하는 기능도 포함됩니다. 즉, `missing_numbers`는 최종적으로 1부터 45까지의 숫자 중에서 출현하지 않는 번호만을 반환합니다.

all_numbers = set(range(1, 46))
missing_numbers = sorted(all_numbers - set(unique_numbers))



#### 4. 결과 반환 🎊

마지막으로, 우리가 찾은 누락된 숫자들을 정리하여 반환합니다. 이제 함수 전체는 이렇게 생겼어요:

def fetch_recent_lotto_missing_numbers():
    current_draw = get_latest_draw_no()
    recent_lotto_numbers = []

    for i in range(current_draw, current_draw - 30, -1):
        url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={i}"
        response = requests.get(url)
        data = response.json()

        if data['returnValue'] == 'success':
            numbers = [
                data['drwtNo1'], data['drwtNo2'], data['drwtNo3'],
                data['drwtNo4'], data['drwtNo5'], data['drwtNo6']
            ]
            recent_lotto_numbers.append(numbers)

    unique_numbers = pd.unique(pd.DataFrame(recent_lotto_numbers).values.ravel()).tolist()
    all_numbers = set(range(1, 46))
    missing_numbers = sorted(all_numbers - set(unique_numbers))
    
    return missing_numbers



#### 결론 💡

이 함수는 우리가 놓친 숫자들을 쉽고 빠르게 찾아주며, 최신 30회차에서 출현하지 않는 숫자들을 제외하는 기능까지 추가되어 있습니다. 로또 번호를 예측하는 데 도움이 될 거예요. 다음번 로또 추첨에서 행운이 함께하길 바라요! 행운을 잡아보세요! 🍀✨