Python

단어 맞추기 게임

hyungminjeon 2024. 5. 29. 19:10

[문제]

어를 주어진 기회 안에 맞추는 게임을 만들어보세요

  1. 컴퓨터가 랜덤으로 영어단어를 선택합니다.
    1. 영어단어의 자리수를 알려줍니다.
    2. ex ) PICTURE = 7자리
  2. 사용자는 A 부터 Z 까지의 알파벳 중에서 하나를 선택합니다.
    1. 맞출 경우 해당 알파벳이 들어간 자리를 전부 보여줍니다.
    2. 틀릴 경우 목숨이 하나 줄어듭니다.
  3. 사용자가 9번 틀리면 게임오버됩니다.
  4. 게임오버 되기 전에 영어단어의 모든 자리를 알아내면 플레이어의 승리입니다.

[시도]

1. 랜덤으로 영어단어를 선택하기 위해 random 모듈을 import한 후 choice함수를 통해 랜덤한 영어단어를 선택하였다.

2. 맞출 경우 해당 알파벳이 들어간 자리를 전부 보여주기 위해 computer answer list(comp_answer)와는 별개로 user answer list(user_answer)를 정의하였고 '_' 캐릭터를 영어단어의 개수와 동일하게 삽입하였다. 틀릴 경우 목숨이 줄어드는 것을 체크하기위해서는 for loop 안에 correct 변수를 추가하였다. 또한, for loop안에서는 정답글자와 유저가 입력한 character가 일치하는지의 여부를 체크하여 일치하는 경우 user_answer리스트에 글자를 추가하여 주었다.

[해결]

import random

def word_guess_game():
    word_list = ["airplane", "apple", "arm", "bakery", "banana","kettle", "knife", "leg"]
    selected_word = random.choice(word_list)
    print(f'단어의 자리수는 {len(selected_word)}입니다.')
    

    comp_answer = list(selected_word)
    user_answer = ['_'] * len(selected_word)

    
    chance = 9
    while chance != 0 and '_' in user_answer:
        
        user_choice = input('A부터 Z까지 알파벳 단어를 하나 선택해주세요: ').lower()
        if user_choice in user_answer:
            print("이미 선택한 알파벳입니다. 다른 알파벳을 선택해주세요.")
        else:
            for i in range(len(comp_answer)):
                correct = 0
                if comp_answer[i] == user_choice:
                    user_answer[i] = user_choice
                    correct += 1
            if correct == 0:
                chance -= 1
            print(user_answer)
            if '_' not in user_answer:
                print("축하합니다.")
                return
    
    print(f"Game Over. 선택된 단어는 {selected_word} 였습니다.")
    
word_guess_game()

[정리 및 새롭게 알게된 점]

while문과 for loop을 이용하여 리스트를 수정함으로써 리스트 데이터형을 더 잘 이해할 수 있었고 변수선언을 어떻게 할 지에 대한 고민도 해볼 수 있었던 시간이였다.