IT

로또 최근 회차 자동으로 알아내는 파이썬 코드

astrocker 2023. 9. 23. 23:52
반응형

로또 당첨 번호는 api를 통해서 알아낼 수 있는데, 최근 추첨 회차 정보를 스스로 찾아내는 코드를 만들어 보았다.

조회하는 기간을 api에 알려줘야 하기 때문에, 가장 최근 회차를 알아내어 다시 api에다가 변수값으로 입력하게 할 수 있다.

import requests, random, math

if __name__ == "__main__":

    def findRecentLottoDraw(start):
        current_draw = start
        a = 1  # 반복 단계를 나타내는 변수
        m = 0  # 이전 회차 기억 변수 초기값

        while True:
            # API 요청 URL 생성
            url = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={current_draw}"
            n = current_draw  # 이전 회차 기억

            # API 요청
            response = requests.get(url)
            data = response.json()

            # API 응답 결과 확인
            if data.get("returnValue") == "success":

                # "success"인 경우, 현재 값과 current_draw + 1 회차의 결과 비교
                url_next = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={current_draw + 1}"
                response_next = requests.get(url_next)
                data_next = response_next.json()

                # current_draw + 1 회차의 결과가 "fail"이면 최근 회차로 결정
                if data_next.get("returnValue") == "fail":
                    return current_draw

                # 증가폭, 다음 회차 계산
                delta = abs(current_draw - m) * 2
                current_draw += delta
                b = '+'

            elif data.get("returnValue") == "fail":

                # "fail"인 경우, 현재 값과 current_draw - 1 회차의 결과 비교
                url_next = f"https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo={current_draw - 1}"
                response_next = requests.get(url_next)
                data_next = response_next.json()

                # current_draw - 1 회차의 결과가 "success"이면 최근 회차로 결정
                if data_next.get("returnValue") == "success":
                    return current_draw-1

                # 증가폭, 다음 회차 계산
                delta = math.ceil(abs(current_draw - m) / 2)
                current_draw -= delta
                b = '-'

            else:
                # "success" 또는 "fail" 외의 결과인 경우, 종료
                return None

            a += 1  # 반복 단계 증가
            m = n
            print('try : ', a, ' 증감 : ', b, delta, ' 현재값 : ', current_draw)
            
            
#from lotto_find_last_round import findRecentLottoDraw
#import random

# 1부터 10000 사이의 랜덤 자연수 생성하여 초기값 변수에 저장
start = random.randint(1, 10000)
print('초기값 : ', start, '\n')

# 최근 로또 추첨 회차 찾기
recent_draw_no = findRecentLottoDraw(start)

if recent_draw_no is not None:
    print(f"\n최근 로또 복권 회차: {recent_draw_no}회차")
else:
    print("\n최근 로또 회차를 찾을 수 없습니다.")

요렇게 몇 번 돌려 보면 랜덤 초기값을 가지고 최근 회차를 찾아내는데, 보통 20번 내외로 시도해서 정확히 찾아 낼 수 있다.

초기값 :  7458 

try :  2  증감 :  - 3729  현재값 :  3729
try :  3  증감 :  - 1865  현재값 :  1864
try :  4  증감 :  - 933  현재값 :  931
try :  5  증감 :  + 1866  현재값 :  2797
try :  6  증감 :  - 933  현재값 :  1864
try :  7  증감 :  - 467  현재값 :  1397
try :  8  증감 :  - 234  현재값 :  1163
try :  9  증감 :  - 117  현재값 :  1046
try :  10  증감 :  + 234  현재값 :  1280
try :  11  증감 :  - 117  현재값 :  1163
try :  12  증감 :  - 59  현재값 :  1104
try :  13  증감 :  - 30  현재값 :  1074
try :  14  증감 :  + 60  현재값 :  1134
try :  15  증감 :  - 30  현재값 :  1104
try :  16  증감 :  - 15  현재값 :  1089
try :  17  증감 :  - 8  현재값 :  1081
try :  18  증감 :  + 16  현재값 :  1097
try :  19  증감 :  - 8  현재값 :  1089
try :  20  증감 :  - 4  현재값 :  1085
try :  21  증감 :  + 8  현재값 :  1093
try :  22  증감 :  - 4  현재값 :  1089
try :  23  증감 :  - 2  현재값 :  1087

최근 로또 복권 회차: 1086회차

 

 

728x90
반응형