행맨(Hangman)은 오랫동안 사랑받아 온 고전 단어 맞추기 게임입니다. 제한된 기회 안에 숨겨진 비밀 단어를 알파벳 한 글자씩 추리며 맞히는 방식이라, 게임을 즐기면서 자연스럽게 새로운 단어를 익힐 수 있습니다.
이번 글에서는 이 클래식한 게임을 파이썬 스크립트로 직접 구현해 보겠습니다. time 모듈, while 루프, 조건문 등 파이썬의 기초 문법을 고루 활용하기 때문에 초보자에게도 훌륭한 연습 프로젝트가 됩니다.
행맨 게임 파이썬 코드
# time 모듈 임포트
import time
# 사용자 환영
name = input("이름이 무엇인가요? ")
print("안녕하세요,", name, "행맨 게임을 시작합니다!")
print("")
# 1초 대기
time.sleep(1)
print("단어를 맞혀보세요...")
time.sleep(0.5)
# 비밀 단어 설정
word = ("Secret")
word = word.lower()
# 빈 값으로 추측 기록 변수 생성
guesses = ''
# 시도 횟수(기회) 설정
turns = 12
# while 루프 생성
# 기회가 0보다 많은 동안 반복
while turns > 0:
# 0부터 시작하는 실패 카운터 생성
failed = 0
# 비밀 단어의 각 문자에 대해
for char in word:
# 해당 문자를 이미 맞혔는지 확인
if char in guesses:
# 맞혔다면 문자 출력
print(char,)
else:
# 아니라면 밑줄(_) 출력
print("_",)
# 실패 카운터 1 증가
failed += 1
# failed가 0이면 모든 글자를 맞힌 것
if failed == 0:
print("You won!")
# 스크립트 종료
break
print()
# 사용자에게 글자 입력 요청
guess = input("글자를 하나 입력하세요: ")
# 입력한 글자를 guesses에 추가
guesses += guess
# 입력한 글자가 비밀 단어에 없다면
if guess not in word:
# 기회 1 감소
turns -= 1
# 오답 메시지 출력
print("틀렸습니다!")
# 남은 기회 출력
print("남은 기회:", turns, "번")
# 기회가 0이면
if turns == 0:
# 패배 메시지 출력
print("게임 오버! 아쉽지만 패배했습니다.")
실행 결과
================== RESTART: C:\\Python\\Python361\\hangman1.py ================== 이름이 무엇인가요? Raj 안녕하세요, Raj 행맨 게임을 시작합니다! 단어를 맞혀보세요... _ _ _ _ _ _ 글자를 하나 입력하세요: s s _ _ _ _ _ 글자를 하나 입력하세요: h 틀렸습니다! 남은 기회: 11 번 s _ _ _ _ _ 글자를 하나 입력하세요: e s e _ _ e _ 글자를 하나 입력하세요: c s e c _ e _ 글자를 하나 입력하세요: r s e c r e _ 글자를 하나 입력하세요: e s e c r e _ 글자를 하나 입력하세요: t s e c r e t You won! >>>
코드 핵심 포인트
- time.sleep(): 지정한 시간(초)만큼 프로그램 실행을 잠시 멈춰 게임에 리듬감을 더합니다.
- while 루프: 남은 기회(turns)가 0보다 큰 동안 게임을 계속 반복합니다.
- for 루프와 in 연산자: 비밀 단어의 각 글자가 지금까지 입력한 글자(guesses)에 포함되어 있으면 글자를, 없으면 밑줄(_)을 출력합니다.
- failed 카운터: 아직 맞히지 못한 글자 수를 셉니다. 이 값이 0이면 단어를 모두 맞힌 것이므로 승리 메시지를 출력하고 break로 루프를 종료합니다.
- 기회 감소 로직: 입력한 글자가 단어에 없으면 기회가 1씩 줄어들고, 기회가 0이 되면 패배 메시지와 함께 게임이 끝납니다.
더 발전시키고 싶다면?
기본 버전에 익숙해졌다면 다음과 같은 기능을 추가해 보세요.
random모듈을 사용해 미리 준비한 단어 목록에서 무작위로 단어 선택하기- 알파벳이 아닌 입력이 들어왔을 때 예외 처리하기
- 이미 입력한 글자를 다시 입력하지 못하도록 중복 입력 방지하기
- 틀릴 때마다 ASCII 아트로 행맨 그림이 완성되도록 만들기