안녕하세요! 오늘은 여러분과 함께 로또 번호를 재미있게 생성하는 방법에 대해 이야기해볼까 합니다. **Python**을 활용하여 자동으로 로또 번호를 추첨해보도록 하겠습니다. 이 프로그램은 지난 로또 당첨 번호를 기반으로 특정 번호를 제외하고 새로운 번호를 생성하는 기능도 포함되어 있습니다!
## 🔍 기본 개념
로또는 매주 토요일에 진행되며, 번호는 1부터 45까지의 숫자 중에서 무작위로 선택됩니다. 하지만 우리가 원하는 번호를 만들기 위해 몇 가지 규칙을 설정할 수 있습니다. 예를 들어, 특정 번호를 제외하고 싶다면 그 번호는 우리의 로또 번호 리스트에서 제외해야겠죠?
이제 코드를 살펴보며 어떻게 구현했는지 알아보겠습니다!
## 📜 코드 설명
import requests
import random
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
위의 코드는 오늘 날짜 기준으로 최신 로또 회차 번호를 계산합니다. 로또는 2002년 12월 7일에 시작되었으니, 그 날짜를 기준으로 얼마나 많은 주가 지났는지를 계산하여 회차 번호를 정합니다.
### 🎲 로또 번호 가져오기
다음은 로또 당첨 번호를 가져오는 함수입니다.
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
위 함수는 로또 API를 호출하여 지정된 회차의 당첨 번호와 보너스 번호를 가져옵니다. 만약 데이터가 정상적으로 불러와지면, 해당 번호들을 리스트로 반환합니다.
### 🚫 번호 제외하기
우리는 특정 번호를 제외해야 할 필요가 있습니다. 이를 위해 `get_excluded_numbers` 함수를 만듭니다.
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
이 함수는 최신 회차를 기준으로 특정 번호를 제외하고, 보너스 번호를 포함할지 여부를 결정합니다.
### 🎉 로또 번호 생성하기
마지막으로, 로또 번호를 생성하는 함수를 살펴보겠습니다.
def generate_lotto_numbers(excluded_numbers):
all_numbers = set(range(1, 46)) # 1부터 45까지의 숫자
excluded_set = set(excluded_numbers) # 제외할 번호 집합
# 제외된 번호를 제거한 번호 집합
available_numbers = list(all_numbers - excluded_set)
# 무작위로 6개의 로또 번호 선택
lotto_numbers = random.sample(available_numbers, 6)
return lotto_numbers
이 함수는 1부터 45까지의 모든 숫자 중에서 제외된 번호를 뺀 후, 무작위로 6개의 번호를 선택합니다.
## 📊 전체 프로그램 실행
모든 함수가 준비되었으니 이제 전체 프로그램을 실행해봅시다. 아래 코드는 로또 번호를 추첨하고 결과를 출력합니다.
# 최신 회차 번호 계산
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}")
# 10개의 로또 번호 세트 추첨
for i in range(10):
lotto_numbers = generate_lotto_numbers(excluded_numbers)
print(f"세트 {i + 1}의 당첨 번호: {lotto_numbers}")
else:
print(f"{latest_draw_no - 2}회차의 데이터를 불러오지 못했습니다.")
### 전체소스
import requests
import random
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)
# 제외할 번호를 정렬
excluded_numbers.sort()
return excluded_numbers, target_numbers, target_bonus
else:
return None, None, None
def generate_lotto_numbers(excluded_numbers):
all_numbers = set(range(1, 46)) # 1부터 45까지의 숫자
excluded_set = set(excluded_numbers) # 제외할 번호 집합
# 제외된 번호를 제거한 번호 집합
available_numbers = list(all_numbers - excluded_set)
# 무작위로 6개의 로또 번호 선택
lotto_numbers = random.sample(available_numbers, 6)
# 선택된 번호를 정렬
return sorted(lotto_numbers)
# 최신 회차 번호 계산
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}")
# 10개의 로또 번호 세트 추첨
for i in range(10):
lotto_numbers = generate_lotto_numbers(excluded_numbers)
print(f"세트 {i + 1}의 당첨 번호: {lotto_numbers}") # 정렬된 번호 출력
else:
print(f"{latest_draw_no - 2}회차의 데이터를 불러오지 못했습니다.")
### 출력결과
오늘 날짜 기준 최신 로또 회차 번호는: 1141회차 입니다.
제외할 번호: [5, 40, 18]
1139회차: 당첨 번호: [5, 12, 15, 30, 37, 40], 보너스 번호: 18
세트 1의 당첨 번호: [9, 13, 2, 30, 33, 25]
세트 2의 당첨 번호: [42, 22, 17, 28, 24, 43]
세트 3의 당첨 번호: [27, 36, 22, 45, 37, 35]
세트 4의 당첨 번호: [25, 24, 28, 19, 45, 29]
세트 5의 당첨 번호: [1, 4, 6, 41, 28, 23]
세트 6의 당첨 번호: [7, 4, 25, 9, 20, 35]
세트 7의 당첨 번호: [10, 15, 44, 9, 34, 3]
세트 8의 당첨 번호: [38, 22, 16, 19, 44, 37]
세트 9의 당첨 번호: [16, 26, 7, 30, 43, 25]
세트 10의 당첨 번호: [14, 27, 38, 42, 15, 3]
### 결과
이 코드를 실행하면 최신 회차에 기반하여 제외된 번호를 고려한 10개의 로또 번호 세트를 얻을 수 있습니다. 매 세트마다 새로운 번호를 생성하여 무작위로 제공하므로, 여러분의 로또 꿈에 한 발짝 더 다가갈 수 있는 기회를 제공합니다!
이제 여러분도 직접 로또 번호를 생성해보세요! 행운을 빕니다! 🍀
'파이썬으로 로또 1등 도전기' 카테고리의 다른 글
10일차) 로또 원칙을 MySQL에 저장하는 방법 (0) | 2024.10.22 |
---|---|
9일차) 원칙 및 예상번호 등록을 위한 MySQL DB설정 준비 (1) | 2024.10.14 |
7일차) 로또 번호를 가져와서 특정회차 제외 번호 설정하기 (0) | 2024.10.13 |
6일차) 최신 회차부터 이전 10회까지 가져오기 (0) | 2024.10.13 |
5일차) 오늘 날짜 기준으로 최신 로또 회차 번호 알아내기 (0) | 2024.10.13 |