import random from collections import Counter class LottoGenerator: MIN_NUM = 1 MAX_NUM = 45 COUNT = 5 BONUS_COUNT = 1 @staticmethod def generate(count=1, with_bonus=False): """로또 번호 생성 Args: count: 생성할 세트 개수 with_bonus: 보너스 번호 포함 여부 Returns: list: 로또 번호 리스트 (또는 (번호, 보너스) 튜플) """ results = [] for _ in range(count): numbers = sorted(random.sample( range(LottoGenerator.MIN_NUM, LottoGenerator.MAX_NUM + 1), LottoGenerator.COUNT )) if with_bonus: bonus = random.randint(LottoGenerator.MIN_NUM, LottoGenerator.MAX_NUM) while bonus in numbers: # 보너스는 본번호와 중복 불가 bonus = random.randint(LottoGenerator.MIN_NUM, LottoGenerator.MAX_NUM) results.append((numbers, bonus)) else: results.append(numbers) return results @staticmethod def check_win(user_numbers, winning_numbers, winning_bonus=None): """당첨 확인 Args: user_numbers: 사용자 번호 (list) winning_numbers: 당첨 번호 (list) winning_bonus: 당첨 보너스 번호 (int, optional) Returns: dict: 매칭 개수, 보너스 매칭, 등수 """ match_count = len(set(user_numbers) & set(winning_numbers)) bonus_match = winning_bonus in user_numbers if winning_bonus else False # 로또 등수 (한국 기준) rank_table = { (5, False): "1등", (4, False): "4등", (3, False): "5등", (4, True): "2등", (3, True): "3등", } rank = rank_table.get((match_count, bonus_match), "낙첨") return { "매칭": match_count, "보너스": bonus_match, "등수": rank, "당첨": rank != "낙첨" } @staticmethod def batch_check(user_tickets, winning_ticket): """여러 티켓 일괄 검증 Args: user_tickets: 사용자 티켓 리스트 winning_ticket: 당첨 티켓 (numbers 또는 (numbers, bonus) 튜플) Returns: list: 검증 결과 리스트 """ if isinstance(winning_ticket[0], tuple): winning_numbers, winning_bonus = winning_ticket else: winning_numbers = winning_ticket winning_bonus = None results = [] for ticket in user_tickets: result = LottoGenerator.check_win(ticket, winning_numbers, winning_bonus) results.append({ "티켓": ticket, **result }) return results # ===== 사용 예시 ===== # 1. 기본 로또 생성 (보너스 없음) print("=== 기본 로또 5세트 ===") tickets = LottoGenerator.generate(count=5) for i, ticket in enumerate(tickets, 1): print(f"티켓 {i}: {ticket}") print("\n=== 보너스 번호 포함 ===") tickets_with_bonus = LottoGenerator.generate(count=3, with_bonus=True) for i, (numbers, bonus) in enumerate(tickets_with_bonus, 1): print(f"티켓 {i}: {numbers} + 보너스: {bonus}") # 2. 당첨 번호 설정 및 검증 print("\n=== 당첨 검증 ===") winning_numbers = [7, 14, 21, 28, 35] winning_bonus = 42 user_ticket = [7, 14, 21, 28, 40] result = LottoGenerator.check_win(user_ticket, winning_numbers, winning_bonus) print(f"내 번호: {user_ticket}") print(f"당첨 번호: {winning_numbers} + {winning_bonus}") print(f"결과: {result}") # 3. 여러 티켓 일괄 검증 print("\n=== 일괄 검증 ===") my_tickets = [ [7, 14, 21, 28, 35], [1, 2, 3, 4, 5], [7, 14, 21, 28, 42] ] batch_results = LottoGenerator.batch_check(my_tickets, winning_numbers) for res in batch_results: print(f"티켓: {res['티켓']} → {res['등수']}")