본문 바로가기

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

11일차) lotto_rules에서 제외수 가져와서 당첨번호 추출하기

안녕하세요, 로또 애호가 여러분! 🎊 혹시 최고의 로또 번호를 고르는 방법이 궁금하셨나요? 아니면 다음 행운의 숫자를 선택하는 재미있는 방법을 찾고 계신가요? 그렇다면 잘 오셨습니다! 오늘은 로또 번호를 생성하고, 원하지 않는 번호는 피하는 방법을 소개하는 파이썬 마법을 배워보겠습니다. 자, 시작해 볼까요?

### 🥳 우리가 할 일

우리는 다음을 수행하는 파이썬 스크립트를 만들 것입니다:
1. MySQL 데이터베이스에 연결하여 로또 규칙을 가져옵니다.
2. 최신 로또 추첨 번호를 조회합니다.
3. 해당 규칙에 따라 제외할 번호를 계산합니다.
4. 마지막으로 제외할 번호를 피하면서 무작위로 로또 번호를 생성합니다!

### 📦 필요한 것들

이 모든 것을 실현하기 위해 필요한 것들은 다음과 같습니다:
- **Python**: 물론! 설치되어 있어야 합니다.
- **라이브러리**: API 호출을 위한 `requests`, 번호 생성을 위한 `random`, MySQL 데이터베이스와 연결하기 위한 `pymysql`을 사용할 것입니다.

자, 이제 우리의 멋진 파이썬 코드를 작성해볼까요:

import requests
import random
from datetime import datetime
import pymysql  # MySQL 연결을 위한 라이브러리



### 📈 로또 규칙 가져오기

먼저, MySQL 데이터베이스에 연결하여 로또 규칙을 가져와야 합니다. 다음과 같이 수행합니다:

def get_lotto_rules_from_db():
    connection = pymysql.connect(
        host='localhost',
        user='root',
        password='your_password',
        database='lotto_db',
    )
    # 규칙을 가져오는 코드...



이 함수는 특정 로또 규칙, 특히 제외할 번호를 포함한 여러 정보를 반환합니다.

### 📅 최신 추첨 번호 가져오기

다음으로, 최신 추첨 번호가 무엇인지 알아보아야 합니다. 로또 추첨은 매주 토요일에 진행된다는 사실, 알고 계셨나요? 오늘 날짜를 기준으로 최신 회차 번호를 계산하는 방법은 다음과 같습니다:

def get_latest_draw_no():
    first_draw_date = datetime(2002, 12, 7)  # 로또 1회차 기준 날짜
    today = datetime.today()
    days_passed = (today - first_draw_date).days
    draw_no = (days_passed // 7) + 1
    return draw_no



### 🎯 제외할 번호 설정하기

이제 가장 재미있는 부분, 즉 제외할 번호를 규칙에 따라 설정해봅시다! 우리는 특정 회차가 있는지, 이전 회차에 대해 작업할지를 체크하여 스마트하게 처리했습니다.

def get_excluded_numbers(latest_draw_no, lotto_round, pre_lotto_round, exclude_indices, exclude_bonus):
    if lotto_round is not None:
        target_draw_no = lotto_round
    elif pre_lotto_round is not None:
        target_draw_no = latest_draw_no - pre_lotto_round
    # 당첨 번호를 가져오고 제외할 번호를 반환하는 코드



### 🎲 로또 번호 생성하기

마지막으로, 나만의 행운 번호 세트를 생성해보겠습니다! 🎲 우리는 원하지 않는 번호를 제외하고 남은 숫자 중에서 6개를 무작위로 선택할 것입니다.

def generate_lotto_numbers(excluded_numbers):
    all_numbers = set(range(1, 46))
    excluded_set = set(excluded_numbers)
    available_numbers = list(all_numbers - excluded_set)
    lotto_numbers = random.sample(available_numbers, 6)
    return sorted(lotto_numbers)



### 💥 모든 것을 하나로 묶기

이제 모든 조각이 준비되었으니, 마무리 작업을 해보겠습니다! 다음은 모든 것을 연결하는 방법입니다:

# MySQL에서 로또 원칙 가져오기
condition_type, exclude_indices, exclude_bonus, lotto_round, pre_lotto_round = get_lotto_rules_from_db()

if condition_type and exclude_indices is not None:
    latest_draw_no = get_latest_draw_no()
    excluded_numbers, target_numbers, target_bonus = get_excluded_numbers(latest_draw_no, lotto_round, pre_lotto_round, exclude_indices, exclude_bonus)
    
    if excluded_numbers:
        print(f"제외할 번호: {excluded_numbers}")  # 제외 번호 출력
        if lotto_round is not None:
            print(f"{lotto_round}회차: 당첨 번호: {target_numbers}, 보너스 번호: {target_bonus}")
        elif pre_lotto_round is not None:
            print(f"{latest_draw_no - pre_lotto_round}회차: 당첨 번호: {target_numbers}, 보너스 번호: {target_bonus}")

        # 10개의 로또 번호 세트 추첨
        for i in range(10):
            lotto_numbers = generate_lotto_numbers(excluded_numbers)
            print(f"세트 {i + 1}의 당첨 번호: {lotto_numbers}")  # 정렬된 번호 출력



### 🎉 결론

이제 끝났습니다! 제외할 번호를 똑똑하게 피하면서 로또 번호를 생성하는 재미있는 방법을 배우셨습니다. 누가 알아요, 다음에는 행운이 함께할지도요! 💰 

코드를 마음껏 수정해보시고, 결과가 어땠는지 저희에게 알려주세요! 행운을 빕니다, 여러분! 🍀