본문 바로가기

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

15일차) 로또 번호 관리 화면에 메뉴별로 기능 추가하기

 

로또에 흥미가 있는 분들을 위해 파이썬의 웹 프레임워크 `Flask`를 사용해 로또 번호 관리 웹 애플리케이션을 만들어봤어요. 로또 번호를 생성하고 관리할 수 있는 이 웹 애플리케이션으로 당첨 가능성을 높여보세요! 지금부터 코드를 하나씩 알아볼게요!

---

#### 📦 필요한 라이브러리 준비

import requests
import random
from datetime import datetime, timedelta
import pymysql
from flask import Flask, render_template, request, jsonify



우리 프로젝트는 다양한 라이브러리를 활용합니다. `requests`는 로또 당첨 번호를 가져오기 위해, `random`은 번호 생성에, `datetime`은 회차 계산에, `pymysql`은 MySQL 연결을 위해 사용해요. `Flask`는 기본이죠!

---

#### 🎲 로또 번호 생성 규칙 가져오기 (get_lotto_rules_from_db)

사용자가 원하는 조건에 맞춰 로또 번호를 생성할 수 있게, 규칙 데이터를 가져옵니다. 예를 들어 특정 번호를 제외한다거나, 보너스 번호를 포함한다거나 하는 조건들이죠.

def get_lotto_rules_from_db():
    connect_to_db()
    try:
        with connection.cursor() as cursor:
            sql = "SELECT id, condition_type, order_sequence, bonus_included, lotto_round, pre_lotto_round FROM lotto_rules WHERE id = 1"
            cursor.execute(sql)
            result = cursor.fetchone()
            if result:
                lotto_rule_id, condition_type, order_sequence, bonus_included, lotto_round, pre_lotto_round = result
                exclude_indices = [int(i) - 1 for i in order_sequence.split(',')]
                exclude_bonus = bonus_included == 1
                return lotto_rule_id, condition_type, exclude_indices, exclude_bonus, lotto_round, pre_lotto_round
    finally:
        pass



---

#### 💾 MySQL에 로또 번호 저장 (insert_lotto_lucky_numbers)

생성한 번호와 그 상태(예: 당첨 여부)를 MySQL에 저장해 언제든지 확인할 수 있도록 합니다.

def insert_lotto_lucky_numbers(target_lotto_round, lucky_numbers, lotto_rank, lucky_yn):
    connect_to_db()
    try:
        with connection.cursor() as cursor:
            sql = """
            INSERT INTO lotto_lucky_numbers (target_lotto_round, lucky_numbers, lotto_rank, lucky_yn)
            VALUES (%s, %s, %s, %s)
            """
            lucky_numbers_str = ', '.join(map(str, lucky_numbers))
            cursor.execute(sql, (target_lotto_round, lucky_numbers_str, lotto_rank, lucky_yn))
            connection.commit()
    finally:
        pass



---

#### 🎯 최신 로또 회차 계산 (get_latest_draw_no)

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



---

#### 🧩 번호 생성기

제외할 번호를 지정해 놓으면, 이를 제외하고 새로운 번호를 생성할 수 있습니다. 당첨 가능성을 높일 수도 있겠죠?

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



---

#### HTML 파일을 통한 시각적 화면 구성 (index.html)

이제 HTML을 통해 로또 번호를 쉽게 확인하고 생성할 수 있는 화면을 만들어볼까요? 각각의 기능을 버튼으로 분리해, 사용자 경험을 더 편리하게 만들었습니다.

<h1>로또 번호 관리</h1>

<button onclick="showMyLottoNumbers()">나의 로또번호</button>
<button onclick="showLottoGenerator()">로또번호 생성</button>
<button onclick="showWinningNumbers()">당첨 로또 번호</button>



이제 "나의 로또 번호" 화면에서는 내가 저장한 로또 번호를 확인하고, "로또 번호 생성" 화면에서는 번호를 생성할 수 있답니다! 

---

#### 🎉 이 앱을 실행하면?

1. **로또 회차 선택**: 원하는 회차를 선택해 해당 회차의 당첨 번호를 볼 수 있습니다.
2. **번호 생성기**: 조건에 맞는 나만의 로또 번호를 생성할 수 있죠!
3. **당첨 여부 확인**: 내가 생성한 번호와 실제 당첨 번호를 비교해 보너스와 일치하는 번호는 노란색으로 표시됩니다!

---

이렇게 해서 로또 관리 애플리케이션을 완성했습니다. 앞으로 직접 만들면서 필요한 기능을 추가해 보세요!