2026. 7. 19. 16:23ㆍ파이썬
수업 시간: 60~90분 | 대상: input(), if, while 기초를 배운 학습자 | 형태: 실습 중심
📌 오늘 만들 것
컴퓨터가 1~100 사이 숫자를 정하고, 사용자가 맞힐 때까지 UP/DOWN 힌트를 주는 게임.
> 숫자를 입력하세요: 50
UP
> 숫자를 입력하세요: 75
DOWN
> 숫자를 입력하세요: 63
🎉 정답입니다! 3번 만에 맞혔습니다.
배우는 개념: random, input/int, if-elif-else, while+break/continue, try-except, 함수
1️⃣ 설계부터: 코드 짜기 전에 순서를 말로 정리하기
코딩보다 먼저 할 일 — 흐름을 문장으로 써보기:
- 컴퓨터가 정답을 정한다
- 사용자가 숫자를 입력한다
- 정답과 비교해서 UP/DOWN/정답을 알려준다
- 맞힐 때까지 2~3을 반복한다
💡 이 순서 정리가 바로 알고리즘입니다. 코드보다 먼저 설계하는 습관을 들이는 게 이 수업의 진짜 목표입니다.
2️⃣ 최소 기능부터: 딱 한 번만 맞혀보기
욕심내지 않고, 반복 없이 딱 한 번 비교하는 코드부터 만듭니다.
import random
answer = random.randint(1, 100) # 1~100 중 무작위 정답
guess = int(input("숫자를 입력하세요: ")) # 입력은 항상 문자열 → int()로 변환
if guess < answer:
print("UP")
elif guess > answer:
print("DOWN")
else:
print("정답입니다!")
꼭 짚어줄 포인트
개념 왜 중요한가
| random.randint(1, 100) | 1과 100을 포함한 정수 반환 |
| int(input(...)) | input()은 항상 문자열 → 비교하려면 숫자로 변환 필수 |
| if / elif / else | 세 가지 결과(작다/크다/같다)를 분기 처리 |
✅ 확인 문제: random.randint(10, 20)은 몇부터 몇까지의 숫자를 만들까요? → 10~20 (둘 다 포함)
3️⃣ 반복시키기: while + break
한 번으로는 게임이 아니죠. 맞힐 때까지 반복하고, 시도 횟수도 세어봅니다.
import random
answer = random.randint(1, 100)
count = 0
while True: # 무한 반복
guess = int(input("숫자를 입력하세요: "))
count += 1
if guess < answer:
print("UP")
elif guess > answer:
print("DOWN")
else:
print(f"정답입니다! {count}번 만에 맞혔습니다.")
break # 반복 탈출
while True는 탈출구(break)가 반드시 있어야 무한루프에 빠지지 않습니다. 이 관계를 꼭 강조해주세요.
4️⃣ 안전장치 달기: 잘못된 입력 막기
지금 코드는 안녕 같은 문자를 넣거나 999처럼 범위 밖 숫자를 넣으면 뻗거나 이상하게 동작합니다. 두 가지를 막습니다.
import random
answer = random.randint(1, 100)
count = 0
while True:
try:
guess = int(input("1~100 사이 숫자를 입력하세요: "))
except ValueError:
print("숫자만 입력해 주세요.")
continue # 다시 입력받기 (횟수 증가 X)
if not (1 <= guess <= 100):
print("1~100 사이 숫자만 입력하세요.")
continue
count += 1
if guess < answer:
print("UP")
elif guess > answer:
print("DOWN")
else:
print(f"정답입니다! {count}번 만에 맞혔습니다.")
break
상황 처리 방법
| 문자를 입력 (ValueError) | try / except로 감싸고 다시 입력받기 |
| 범위 밖 숫자 | if not (1 <= guess <= 100) 검사 후 continue |
| 잘못된 입력의 공통점 | 시도 횟수(count)를 올리지 않는다 — 놓치기 쉬운 디테일! |
5️⃣ 완성도 높이기: 함수로 정리 + 다시 하기
기능을 함수로 나누면 코드가 읽기 쉬워지고, "다시 시작" 같은 기능도 붙이기 편해집니다.
import random
def get_number():
"""유효한 숫자 하나를 입력받아 반환"""
while True:
try:
n = int(input("1~100 사이 숫자를 입력하세요: "))
except ValueError:
print("숫자만 입력해 주세요.")
continue
if not (1 <= n <= 100):
print("1~100 사이 숫자만 입력하세요.")
continue
return n
def play_game():
"""게임 한 판 실행"""
answer = random.randint(1, 100)
count = 0
print("\n🎮 숫자 맞히기 게임 시작!")
while True:
guess = get_number()
count += 1
if guess < answer:
print("UP")
elif guess > answer:
print("DOWN")
else:
print(f"🎉 정답! {count}번 만에 맞혔습니다.")
break
def main():
"""전체 실행 흐름 관리"""
while True:
play_game()
if input("다시 하시겠습니까? (y/n): ").lower() != "y":
print("게임을 종료합니다.")
break
main()
역할 분담
- get_number() → 입력 받기 + 검증만 담당
- play_game() → 게임 한 판의 규칙만 담당
- main() → 반복 실행 여부만 담당
함수마다 하나의 책임만 갖게 나누는 것이 핵심입니다 (일명 "관심사 분리").
🛠️ 실습 문제 (난이도순)
- 범위 바꾸기 — randint(1, 100) → randint(1, 50)으로 바꾸고 안내 문구도 수정
- 시도 횟수 제한 — 10번 안에 못 맞히면 실패 처리 (if count >= 10: ... break)
- 정답 공개 — 실패 시 정답이 몇이었는지 출력
- 난이도 선택 — 시작 전에 쉬움(1~50)/보통(1~100)/어려움(1~500) 선택
- 최고 기록 저장 — best_score 변수에 최소 시도 횟수를 저장하고, 경신 시 축하 메시지
🚀 도전 과제 (자유 선택)
- 힌트: 차이가 5 이하면 "거의 다 왔습니다!", 30 이상이면 "많이 떨어져 있습니다"
- 제한 시간 두기 / 이름 입력받아 기록 남기기 / 컴퓨터와 역할 바꾸기(사용자가 숫자를 내고 컴퓨터가 맞히기)
🤖 AI에게 요청해보기
같은 걸 AI에게 시켜보고 직접 만든 것과 비교합니다.
파이썬으로 숫자 맞히기 게임을 만들어줘.
1~100 사이 숫자를 컴퓨터가 정하고, UP/DOWN 힌트를 주고,
맞힐 때까지 반복하고 시도 횟수를 출력해줘.
초보자용 주석도 달아줘.
체크리스트
- [ ] 직접 실행해서 요구사항대로 동작하는지 확인했나?
- [ ] 이해 안 되는 줄은 없나? (있으면 "이 줄이 뭐하는 거야?"로 되물어보기)
- [ ] 기능은 한 번에 다 요청하지 말고 단계별로 추가 요청했나?
- [ ] 에러가 나면 에러 메시지 전체를 그대로 AI에게 붙여넣었나?
📖 핵심 문법 요약
문법 한 줄 정리
| random.randint(a, b) | a~b 포함 무작위 정수 |
| int(input(...)) | 문자열 입력 → 정수 변환 |
| if / elif / else | 조건별 분기 |
| while True: ... break | 탈출 조건이 있는 무한 반복 |
| continue | 이번 반복만 건너뛰고 다음으로 |
| try / except ValueError | 잘못된 형 변환 예외 처리 |
| def 함수이름(): | 기능 단위로 코드 묶기 |
✅ 마무리 확인 문제
- input()의 결과값 자료형은? → 문자열(str)
- "50"을 정수로 바꾸는 코드는? → int("50")
- 반복문을 완전히 끝내는 키워드는? → break
- 이번 반복만 건너뛰는 키워드는? → continue
- 숫자가 아닌 값을 int()에 넣으면 나는 오류는? → ValueError
오늘의 결과물
무작위 정답 · 입력 검증 · 반복/시도 횟수 · 예외 처리 · 함수 분리 · 재시작까지 갖춘 완성형 숫자 맞히기 게임
'파이썬' 카테고리의 다른 글
| 파이썬으로 텔레그램 Echo Bot 만들기 (0) | 2026.07.25 |
|---|---|
| 텔레그램 봇으로 Google Calendar 일정 등록하기 (0) | 2026.07.25 |
| Python 문자열 슬라이싱과 % 포맷 결합 문제 풀이(Claude) (0) | 2026.07.11 |
| 문자열 조각을 이어 문장 완성하기(Chatgpt) (0) | 2026.07.11 |
| Python 2차원 리스트 인덱싱과 중첩 반복 출력 문제 풀이(Claude) (0) | 2026.07.11 |