로또 당첨 확인 프로그램 코드 분석
- 공유 링크 만들기
- X
- 이메일
- 기타 앱
로또 당첨 확인 프로그램 코드 분석
매주 토요일 밤, 누구나 한 번쯤 꿈꾸는 로또 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 #복권 #모듈화 #난수




댓글
댓글 쓰기