[SK네트웍스 패밀리 엔코어AI캠퍼스] AI 머신러닝 캠프 1기_7월 4주차 회고

[SK네트웍스 패밀리 엔코어AI캠퍼스] AI 머신러닝 캠프 1기_7월 4주차 회고 엔코아 AI 캠퍼스에서 첫 주는 Orientation과 하루 일정의 교육이 이루어 지다 보니, 이번 주가 본격적인 첫 주라고 봐야 할 것 같다. 정말 시간이 눈 깜짝할 사이에 지났다. 이번 주는 AI 개발자의 가장 기본이 되는 Python Programming 능력을 다지고, 실제 데이터 분석 의 핵심인 데이터 수집과 전처리 기술을 습득하는 매우 중요한 시간이었다. Python의 핵심 문법부터 라이브러리를 활용한 실무 기술까지, 적지 않은 양을 학습했고, 학습한 것들을 정리해 본다. 1. Python Programming 문법 가장 먼저 프로그래밍의 기초가 되는 변수와 제어문을 시작으로 코드의 재사용성을 높여주는 함수와 복잡한 데이터를 효율적으로 다루기 위한 자료구조를 학습했다. (1) Python 핵심 문법 정리 - 제어문 : if, for, while 등 조건에 따른 흐름 제어 및 반복 작업 수행 - 자료구조 : 리스트(List), 튜플(Tuple), 딕셔너리(Dictionary), 세트(Set) 등 데이터 특성에 맞는 저장 및 관리 - 함수(Function) : 코드의 논리적 단위 분리, 매개변수와 반환 값을 활용한 코드 재사용성 극대화 # 자료구조와 함수 활용 예시 def process_data(data_list): result = {} for item in data_list: if item not in result: result[item] = 1 else: result[item] += 1 return result data = ['apple', 'banana', 'apple', 'orange', 'banana'] count_result = process_data(data) print(count_re...

로또 당첨 확인 프로그램 코드 분석

로또 당첨 확인 프로그램 코드 분석

매주 토요일 밤, 누구나 한 번쯤 꿈꾸는 로또 1등의 행운을 파이썬 코드를 구현해 본다면 어떨까?

아래 전체 코드는 단순히 난수를 생성하는 것을 넘어, 파이썬의 모듈화(Modularity) 개념과 조건문(Conditional Statement)을 활용해 실제 로또 당첨 로직을 구현해서 사용자의 입력 값을 받아 기계가 뽑은 번호와 비교하고, 당첨 등수를 판별하는 체계적인 구조를 갖추고 있다.

# exercise_09.py

# 모듈
import random

userNums = []; randNums = []; collNums = [];
randBonuNum = 0

def setUserNums(ns):
    global userNums
    userNums = ns

def getUserNums():
    return userNums

def setRandNums():
    global randNums
    randNums = random.sample(range(1, 46), 6)

def getRandNums():
    return randNums

def setBonuNums():
    global randBonuNum

    while True:
        randBonuNum = random.randint(1, 45)
        if randBonuNum not in randNums:
            break

def getBonuNums():
    return randBonuNum

def lottoResult():
    global userNums
    global randNums
    global collNums

    collNums = []

    for un in userNums:
        if un in randNums:
            collNums.append(un)

    if len(collNums) == 6:
        print('1등 당첨!!')
        print(f'번호 : {collNums}')
    elif (len(collNums) == 5) and (randBonuNum in userNums):
        print('2등 당첨!!')
        print(f'번호 : {collNums}, 보너스 번호 : {randBonuNum}')
    elif len(collNums) == 5:
        print('3등 당첨!!')
        print(f'번호 : {collNums}')
    elif len(collNums) == 4:
        print('4등 당첨!!')
        print(f'번호 : {collNums}')
    elif len(collNums) == 3:
        print('5등 당첨!!')
        print(f'번호 : {collNums}')
    else:
        if len(collNums) == 0:
            collNums_val = '없음'
        else:
            collNums_val = collNums

        print('아쉽습니다. 다음 기회에~')
        print(f'기계 번호 : {randNums}')
        print(f'보너스 번호 : {randBonuNum}')
        print(f'선택 번호 : {userNums}')
        print(f'일치 번호 : {collNums_val}')

def startLottol():
    n1 = int(input('첫번째 번호(1 ~ 45) 입력 : '))
    n2 = int(input('두번째 번호(1 ~ 45) 입력 : '))
    n3 = int(input('세번째 번호(1 ~ 45) 입력 : '))
    n4 = int(input('네번째 번호(1 ~ 45) 입력 : '))
    n5 = int(input('다섯번째 번호(1 ~ 45) 입력 : '))
    n6 = int(input('여섯번째 번호(1 ~ 45) 입력 : '))
    selectNums = [n1, n2, n3, n4, n5, n6]

    setUserNums(selectNums)
    setRandNums()
    setBonuNums()

  lottoResult()
# main.py (exercise_09_01.py)
import exercise_09 as lt

lt.startLottol()


전체 코드에 대해 분석해 보자.


1. 프로젝트 구조 (로또 모듈)

코드의 재사용성을 높이기 위해 모듈 부분과 실행 부분을 분리되어 있다.

주요 모듈 기능 (exercise_09.py)

setUserNums  getUserNums  : 사용자가 선택한 6개의 번호를 설정하고 가져 온다.

setRandNums  getRandNums  random.sample  을 사용해서 1부터 45 사이의 숫자 중 중복 없이 6개를 추첨한다.

setBonuNums  : 기계가 뽑은 6개의 번호와 겹치지 않는 보너스 번호 1개를 생성한다.

lottoResult  : 당첨 여부를 판별하는 핵심 함수

로또 번호 추첨 및 보너스 번호 생성 로직 흐름도


2. 당첨 로직의 핵심 (if-else 조건문)

로또 당첨의 등수는 일치하는 번호의 개수에 따라 결정된다.

 lottoResult  함수 내의 조건문은 다음과 같은 우선 순위를 가진다.

(1) 1등 : 일치 번호가 6개일 때

(2) 2등 : 일치 번호가 5개이면서, 사용자가 선택한 번호 중 보너스 번호가 포함되어 있을 때

(3) 3등 : 일치 번호가 5개일 때

(4) 4/5등 : 각각 일치 번호가 4개, 3개일 때

# 당첨 판별 로직 예시
if len(collNums) == 6:
    print('1등 당첨!!')
elif (len(collNums) == 5) and (randBonuNum in userNums):
    print('2등 당첨!!')
# 이하 생략

로또 등수 판별 로직의 다이어그램


3. 프로그램 실행

모듈 부분 (exercise_09.py)lt 라는 이름으로 import하여 프로그램을 실행한다.

 startLottol  함수는 사용자로부터 입력을 받아 위에서 설계한 모듈들을 순차적으로 호출한다.

import exercise_09 as lt

# 로또 프로그램 시작
lt.startLottol()

터미널에서 로또 번호를 입력하고 당첨 결과 확인 화면


4. 코드 리뷰

이 프로그램의 가장 눈에 띄는 부분은 '보너스 번호 처리' 이다.

단순히 랜덤하게 번호를 뽑는 것 뿐만 아니라, while 문을 사용하여 이미 선택된 번호와 중복되지 않는지 검사하는 로직은 향후 데이터 정합성을 다룰 때 매우 중요한 기초가 된다.

또한, global 키워드를 사용해서 전역 변수를 관리하는 방식이다. 실무에서는 모듈 내 변수 캡슐화를 통해 더 안전하게 관리해야 한다.

코드를 통해 확률과 통계를 활용해 복권 당첨을 단순한 운에 맡기는 것이 아니라, 데이터의 흐름을 파악하는 것이 얼마나 중요한지 알 수 있다.

모듈화된 코드 구조 도식화

#lotto #modularity #random #import #while #global #복권 #모듈화 #난수

댓글

이 블로그의 인기 게시물

[SK네트웍스 family 엔코아AI캠퍼스] 나의 목표는 머신러닝 엔지니어다.

[SK네트웍스 패밀리 엔코어AI캠퍼스] AI 머신러닝 캠프 1기_7월 3주차 회고

[SK네트웍스 패밀리 엔코어AI캠퍼스] AI 머신러닝 캠프 1기_7월 4주차 회고