needmoreeasy EN 한국어
배우기

37 — 단어 맞히기: 숨은 단어 게임

★★★★☆ (4/5)게임
선수 지식
26 — 모험, 10 — 랜덤
결과물
제한된 기회 안에 숨은 단어의 글자를 맞히는 행맨형 게임

행맨 게임은 단어를 숨기고 글자마다 빈칸 하나를 보여 줍니다. 글자를 맞히면 빈칸이 채워지고, 틀리면 기회가 하나 줄어듭니다. 단어는 10 가이드의 랜덤선택이 고르고, 반복은 26 가이드의 메뉴 반복을 방향 대신 글자에 쓴 것입니다.

단계

  1. 비밀 단어 목록을 만들고 랜덤선택으로 하나를 무작위로 고릅니다:

    랜덤 사용 최신
    단어들 = ["apple", "grape", "melon", "mango", "orange"]
    비밀 = 랜덤선택(단어들)
    보여줘 비밀
    
    실행해 보기 →

    여러 번 실행해 보세요. 실행마다 다른 단어가 나옵니다.

  2. 단어를 글자마다 빈칸 하나로 보여 줍니다. "_" 문자열 목록이 숨긴 채로 시작하고, " ".join(표시)가 빈칸 사이에 공백을 넣어 출력합니다:

    비밀 = "grape"
    표시 = []
    for 글자 in 비밀:
        표시.append("_")
    보여줘 " ".join(표시)
    
    실행해 보기 →

    _ _ _ _ _는 글자가 다섯 개라는 뜻입니다.

  3. 맞힌 글자는 for 반복으로 단어를 훑으며 맞는 빈칸에 써 넣어 드러냅니다. for i in range(len(비밀))이 위치마다 방문하고, 맞으면 표시[i] = 글자 로 빈칸을 채웁니다:

    비밀 = "grape"
    표시 = []
    for 글자 in 비밀:
        표시.append("_")
    물어봐 letter, "글자 하나를 입력하세요: "
    for i in range(len(비밀)):
        if 비밀[i] == letter:
            표시[i] = letter
    보여줘 " ".join(표시)
    
    실행해 보기 →

    a를 입력하면 _ _ _ _ __ _ a _ _가 됩니다.

  4. 전체 게임에는 기회 세는 변수와 승리·패배 확인이 더해집니다. while 남은기회 > 0이 계속 물어보고, 틀린 글자는 남은기회를 줄이며, "_" not in 표시는 모든 글자를 찾았다는 뜻이고, break가 반복을 떠납니다. daneo-machigi.nme로 저장하세요:

    # 숨은 단어 게임: 비밀 단어의 글자를 맞혀 보세요.
    # 실행: nme 실행 daneo-machigi
    
    랜덤 사용 최신
    
    단어들 = ["apple", "grape", "melon", "mango", "orange"]
    비밀 = 랜덤선택(단어들)
    
    표시 = []
    for 글자 in 비밀:
        표시.append("_")
    
    남은기회 = 6
    추측한 = []
    
    보여줘 "단어를 골랐어요. 글자 수: " + str(len(비밀))
    
    while 남은기회 > 0:
        보여줘 " ".join(표시)
        보여줘 "남은 기회: " + str(남은기회)
        물어봐 letter, "글자 하나를 입력하세요 (q로 포기): "
        만약 letter == "q":
            보여줘 "정답은 " + 비밀
            break
        if letter in 추측한:
            보여줘 "이미 입력한 글자예요: " + letter
            continue
        추측한.append(letter)
        만약 letter in 비밀:
            for i in range(len(비밀)):
                if 비밀[i] == letter:
                    표시[i] = letter
            보여줘 letter + " 맞췄어요!"
            if "_" not in 표시:
                보여줘 " ".join(표시)
                보여줘 "승리! 정답은 " + 비밀
                break
        else:
            남은기회 = 남은기회 - 1
            보여줘 letter + " 틀렸어요"
    
    if 남은기회 == 0:
        보여줘 "패배. 정답은 " + 비밀
    
    실행해 보기 →
  5. 실행하고 글자 네 개를 입력한 다음 포기합니다:

    printf 'e\na\nr\nq\n' | nme 실행 daneo-machigi
    
    단어를 골랐어요. 글자 수: 6
    _ _ _ _ _ _
    남은 기회: 6
    글자 하나를 입력하세요 (q로 포기): e 맞췄어요!
    _ _ _ _ _ e
    남은 기회: 6
    글자 하나를 입력하세요 (q로 포기): a 맞췄어요!
    _ _ a _ _ e
    남은 기회: 6
    글자 하나를 입력하세요 (q로 포기): r 맞췄어요!
    _ r a _ _ e
    남은 기회: 6
    글자 하나를 입력하세요 (q로 포기): 정답은 orange
    

    비밀 단어는 무작위로 고르므로 여러분이 실행하면 다른 단어와 다른 빈칸 모양이 나옵니다.

직접 해보기

대문자도 받아들이게 게임을 고쳐 보세요. 물어봐 letter, ... 바로 뒤에 letter = letter.lower()를 넣으면 A를 입력해도 a와 같은 글자로 맞힙니다:

비밀 = "grape"
표시 = []
for 글자 in 비밀:
    표시.append("_")
물어봐 letter, "글자 하나를 입력하세요: "
letter = letter.lower()
for i in range(len(비밀)):
    if 비밀[i] == letter:
        표시[i] = letter
보여줘 " ".join(표시)
실행해 보기 →

그런 다음 전체 게임에도 같은 줄을 넣고 AG로 시험해 보세요.

배운 것

  • 랜덤선택(단어들)이 목록에서 비밀 단어를 고릅니다.
  • "_" 목록이 글자마다 빈칸 하나를 보여 주고, " ".join(표시)가 출력합니다.
  • range(len(비밀))을 도는 for 반복이 맞는 글자를 각각 드러냅니다.
  • while 남은기회 > 0이 기회를 줄이고 break가 반복을 일찍 떠납니다.

GitHub에서 이 문서 보기