
파이썬으로 5줄 만에 로또 번호 생성기 만들기 (random 모듈 활용)
로또 1등 당첨 확률은 8,145,060분의 1이에요. 엄청나게 낮은 확률이지만, 그래도 희망을 가지고 번호를 고르는 재미가 있죠!
매번 편의점에서 자동 번호를 뽑을 필요 없어요. 파이썬으로 단 5줄이면 나만의 로또 번호 생성기를 만들 수 있거든요! 🎰
이 글에서는 random 모듈의 기초부터 시작해서, 진짜 사용 가능한 로또 번호 생성기를 단계별로 만들어볼 거예요!
💡 시리즈 연결: 이전 글에서 라이브러리 사용법을 배웠어요. 이번엔 파이썬 기본 제공 모듈인
random으로 재미있는 프로젝트를 만들어요!
로또 게임 규칙 먼저 이해하기
코드를 짜기 전에 로또 규칙을 알아야겠죠?
🎯 로또 6/45 규칙:
✅ 1부터 45까지의 숫자 중 6개를 선택
✅ 번호는 중복 불가 (같은 숫자가 2번 나올 수 없음)
✅ 순서는 상관없음 (자동으로 오름차순 정렬)
✅ 보너스 번호는 추첨 시 자동 선정
✅ 1부터 45까지의 숫자 중 6개를 선택
✅ 번호는 중복 불가 (같은 숫자가 2번 나올 수 없음)
✅ 순서는 상관없음 (자동으로 오름차순 정렬)
✅ 보너스 번호는 추첨 시 자동 선정
예시: 7, 14, 21, 28, 35, 42 ✅
안 되는 경우: 7, 7, 21, 28, 35, 42 ❌ (중복!)
random 모듈 기초 배우기
random 모듈은 파이썬 기본 제공 모듈이에요. 별도 설치 없이 바로 사용 가능!
random 모듈 import 하기
import random
# 이제 random의 모든 기능을 사용할 수 있어요!
random 모듈의 주요 함수들
| 함수 | 기능 | 예시 |
|---|---|---|
random() |
0~1 사이 실수 | 0.8472... |
randint(a, b) |
a~b 사이 정수 (중복 가능) | randint(1, 45) → 23 |
choice(리스트) |
리스트에서 1개 선택 | choice([1,2,3]) → 2 |
sample(리스트, k) |
리스트에서 k개 선택 (중복X) | sample([1,2,3,4,5], 3) → [2,4,1] |
shuffle(리스트) |
리스트 섞기 | [1,2,3] → [3,1,2] |
🎲 random 함수 체험하기
import random
# 1. 주사위 굴리기 (1~6)
dice = random.randint(1, 6)
print(f”주사위: {dice}”)
# 2. 동전 던지기
coin = random.choice([“앞면”, “뒷면”])
print(f”동전: {coin}”)
# 3. 1~10 중 3개 뽑기 (중복X)
numbers = random.sample(range(1, 11), 3)
print(f”번호: {numbers}”)
출력:
주사위: 4
동전: 앞면
번호: [3, 7, 9]
로또 번호 생성기 만들기 – 단계별
이제 본격적으로 로또 생성기를 만들어봐요! 점점 기능을 추가하면서 발전시킬 거예요.
버전 1: 가장 간단한 버전 (5줄!)
🎯 목표: 1~45 중 중복 없는 6개 번호 뽑기
import random
# 1~45 중 6개 선택 (중복X)
numbers = random.sample(range(1, 46), 6)
# 오름차순 정렬
numbers.sort()
print(f”행운의 번호: {numbers}”)
출력:
행운의 번호: [7, 14, 21, 28, 35, 42]
💡 왜 range(1, 46)일까요?
•
• 끝 숫자는 포함되지 않기 때문에 46을 써야 45까지!
•
•
range(1, 46)은 1부터 45까지를 의미해요
• 끝 숫자는 포함되지 않기 때문에 46을 써야 45까지!
•
range(1, 46) = [1, 2, 3, …, 44, 45]
버전 2: 보기 좋게 출력하기
🎯 목표: 로또 용지처럼 예쁘게 출력
import random
def generate_lotto():
“””로또 번호 6개 생성”””
numbers = random.sample(range(1, 46), 6)
numbers.sort()
return numbers
# 번호 생성
numbers = generate_lotto()
# 예쁘게 출력
print(“🎰 로또 번호 생성기”)
print(“=” * 30)
print(f”행운의 번호: {‘ – ‘.join(map(str, numbers))}”)
print(“=” * 30)
print(“행운을 빕니다! 🍀”)
출력:
🎰 로또 번호 생성기
==============================
행운의 번호: 7 – 14 – 21 – 28 – 35 – 42
==============================
행운을 빕니다! 🍀
버전 3: 여러 게임 한 번에 생성
🎯 목표: A, B, C, D, E 게임처럼 여러 개 뽑기
import random
def generate_lotto():
“””로또 번호 6개 생성”””
numbers = random.sample(range(1, 46), 6)
numbers.sort()
return numbers
def generate_multiple(count=5):
“””여러 게임 생성”””
games = [“A”, “B”, “C”, “D”, “E”]
print(“🎰 로또 번호 생성기”)
print(“=” * 40)
for i in range(count):
numbers = generate_lotto()
print(f”[{games[i]}] {‘ – ‘.join(map(str, numbers))}”)
print(“=” * 40)
print(“행운을 빕니다! 🍀”)
# 5게임 생성
generate_multiple(5)
출력:
🎰 로또 번호 생성기
========================================
[A] 3 – 12 – 19 – 27 – 33 – 41
[B] 5 – 11 – 22 – 28 – 36 – 44
[C] 8 – 15 – 21 – 29 – 38 – 42
[D] 2 – 14 – 23 – 31 – 37 – 45
[E] 6 – 17 – 24 – 30 – 35 – 43
========================================
행운을 빕니다! 🍀
버전 4: 수동 번호 + 자동 번호 섞기
🎯 목표: 고정 번호 있고 나머지만 자동 생성
import random
def generate_semi_auto(fixed_numbers, total=6):
“””
반자동 번호 생성
fixed_numbers: 고정할 번호 리스트
total: 전체 번호 개수 (기본 6개)
“””
# 1~45 중 고정 번호를 제외한 나머지
available = [n for n in range(1, 46) if n not in fixed_numbers]
# 부족한 개수만큼 자동 생성
need = total – len(fixed_numbers)
auto_numbers = random.sample(available, need)
# 합치고 정렬
final_numbers = sorted(fixed_numbers + auto_numbers)
return final_numbers
# 예시: 7, 14, 21은 고정, 나머지 3개는 자동
my_lucky = [7, 14, 21]
result = generate_semi_auto(my_lucky)
print(“🎰 반자동 번호 생성”)
print(f”고정 번호: {my_lucky}”)
print(f”최종 번호: {result}”)
출력:
🎰 반자동 번호 생성
고정 번호: [7, 14, 21]
최종 번호: [7, 14, 21, 28, 35, 42]
완성판: 모든 기능을 담은 최종 로또 생성기
지금까지 배운 모든 걸 합쳐서 완벽한 로또 생성기를 만들어봐요!
🏆 최종 완성 프로젝트
import random
def generate_lotto():
“””완전 자동 번호 생성”””
numbers = random.sample(range(1, 46), 6)
return sorted(numbers)
def generate_semi_auto(fixed_numbers):
“””반자동 번호 생성”””
available = [n for n in range(1, 46) if n not in fixed_numbers]
need = 6 – len(fixed_numbers)
auto_numbers = random.sample(available, need)
return sorted(fixed_numbers + auto_numbers)
def print_numbers(numbers, label=“행운의 번호”):
“””번호를 예쁘게 출력”””
formatted = ” – “.join(f”{n:02d}” for n in numbers)
print(f”[{label}] {formatted}”)
def main():
“””메인 프로그램”””
print(“🎰 로또 번호 생성기”)
print(“=” * 50)
while True:
print(“\n1. 자동 (6개 모두 자동)”)
print(“2. 반자동 (일부 고정 + 자동)”)
print(“3. 여러 게임 생성”)
print(“4. 종료”)
choice = input(“\n선택: “)
if choice == “1”:
numbers = generate_lotto()
print(“\n” + “=” * 50)
print_numbers(numbers, “자동”)
print(“=” * 50)
elif choice == “2”:
fixed = input(“고정할 번호 (쉼표로 구분, 예: 7,14,21): “)
fixed_numbers = [int(n.strip()) for n in fixed.split(“,”)]
if len(fixed_numbers) >= 6:
print(“❌ 고정 번호는 5개 이하만 가능해요!”)
continue
numbers = generate_semi_auto(fixed_numbers)
print(“\n” + “=” * 50)
print(f”고정: {fixed_numbers}”)
print_numbers(numbers, “반자동”)
print(“=” * 50)
elif choice == “3”:
count = int(input(“몇 게임? (1-5): “))
games = [“A”, “B”, “C”, “D”, “E”]
print(“\n” + “=” * 50)
for i in range(count):
numbers = generate_lotto()
print_numbers(numbers, games[i])
print(“=” * 50)
elif choice == “4”:
print(“\n행운을 빕니다! 🍀”)
break
else:
print(“❌ 1-4 중에서 선택해주세요!”)
if __name__ == “__main__”:
main()
실행 화면:
🎰 로또 번호 생성기
==================================================
1. 자동 (6개 모두 자동)
2. 반자동 (일부 고정 + 자동)
3. 여러 게임 생성
4. 종료
선택: 1
==================================================
[자동] 03 – 12 – 19 – 27 – 33 – 41
==================================================
번외: 재미있는 추가 기능들
1. 홀수/짝수 비율 조절
def generate_balanced():
“””홀수 3개, 짝수 3개로 균형있게”””
odds = random.sample(range(1, 46, 2), 3) # 홀수
evens = random.sample(range(2, 46, 2), 3) # 짝수
return sorted(odds + evens)
numbers = generate_balanced()
print(f”균형 잡힌 번호: {numbers}”)
2. 구간별 분산
def generate_distributed():
“””각 구간(1-15, 16-30, 31-45)에서 2개씩”””
numbers = []
numbers += random.sample(range(1, 16), 2) # 1-15
numbers += random.sample(range(16, 31), 2) # 16-30
numbers += random.sample(range(31, 46), 2) # 31-45
return sorted(numbers)
numbers = generate_distributed()
print(f”분산된 번호: {numbers}”)
3. 최근 당첨번호 제외
def generate_exclude_recent(recent_winning):
“””최근 당첨 번호 제외하고 생성”””
available = [n for n in range(1, 46) if n not in recent_winning]
numbers = random.sample(available, 6)
return sorted(numbers)
# 지난 주 당첨번호
last_week = [3, 7, 12, 25, 33, 41]
numbers = generate_exclude_recent(last_week)
print(f”새로운 번호: {numbers}”)
random 모듈 꿀팁
꿀팁 1: seed로 결과 고정하기
import random
# seed 설정하면 항상 같은 결과
random.seed(42)
print(random.sample(range(1, 46), 6)) # 항상 같은 번호!
# 다시 랜덤하게 하려면
random.seed() # 현재 시간 기준으로 초기화
💡 seed는 언제 쓰나요?
• 테스트할 때: 같은 결과로 반복 테스트
• 디버깅할 때: 재현 가능한 버그 찾기
• 실제 사용: seed 설정 안 함 (진짜 랜덤!)
• 테스트할 때: 같은 결과로 반복 테스트
• 디버깅할 때: 재현 가능한 버그 찾기
• 실제 사용: seed 설정 안 함 (진짜 랜덤!)
꿀팁 2: sample vs choices 차이
| 함수 | 중복 | 용도 |
|---|---|---|
sample() |
❌ 중복 불가 | 로또처럼 중복 없는 선택 |
choices() |
✅ 중복 가능 | 주사위처럼 중복 가능한 선택 |
import random
# sample: 중복 없음
print(random.sample([1,2,3,4,5], 3)) # [2, 4, 1]
# choices: 중복 가능
print(random.choices([1,2,3,4,5], k=3)) # [2, 2, 5] (2가 2번!)
꿀팁 3: shuffle로 리스트 섞기
import random
cards = [“♠A”, “♥K”, “♣Q”, “♦J”]
print(f”섞기 전: {cards}”)
random.shuffle(cards) # 원본이 바뀜!
print(f”섞은 후: {cards}”)
마무리: 이제 여러분도 로또 프로그래머!
축하합니다! 🎉 단 5줄로 시작해서 완전한 로또 생성기를 만들었어요!
🎯 오늘 배운 것 체크리스트:
✅ random 모듈 기초 (import random)
✅ 주요 함수들 (randint, choice, sample, shuffle)
✅ 로또 규칙 이해
✅ 5줄 간단 버전
✅ 예쁘게 출력하기
✅ 여러 게임 생성
✅ 반자동 번호 (고정 + 자동)
✅ 완전한 로또 생성기
✅ 추가 기능 (홀짝 균형, 구간 분산)
✅ random 꿀팁 3가지
✅ random 모듈 기초 (import random)
✅ 주요 함수들 (randint, choice, sample, shuffle)
✅ 로또 규칙 이해
✅ 5줄 간단 버전
✅ 예쁘게 출력하기
✅ 여러 게임 생성
✅ 반자동 번호 (고정 + 자동)
✅ 완전한 로또 생성기
✅ 추가 기능 (홀짝 균형, 구간 분산)
✅ random 꿀팁 3가지
핵심 코드 – 5줄 로또 생성기:
import random
numbers = random.sample(range(1, 46), 6)
numbers.sort()
print(f”행운의 번호: {numbers}”)
다음 시리즈에서는 이 로또 생성기를 Streamlit으로 웹앱으로 만들어볼 거예요! 클릭 한 번으로 번호 생성! 🚀
파이썬으로 만든 번호로 1등 당첨되면… 저한테도 연락 주세요! 😄💰