1
resposta

Erro ao carregar os campos vazios da palavra

Quando eu inicio meu jogo, a variável dos campos vazios me retorna apenas um campo, segue código abaixo, e a execução no terminal

import random

def play():

    start()

    secret_word = random_word()

    hit_word = word_spot(secret_word)

    print(hit_word)

    hit = False
    hanged = False    
    step = 0

    while (not hit or not hanged):

        shot = user_input()

        if (shot in secret_word):
            word_validate(secret_word, hit_word, shot)  
        else:
            step += 1

        hanged = step > 7
        hit = ("_" not in hit_word)

        print(hit_word)

    if(hit):
        user_win()
    else:
        user_lost()

def start():
    print(21 * "#")
    print("*** Jogo da Forca ***")
    print(21 * "#")        

def random_word():
    database = open("secret_word.txt","r")
    word_list = []

    for word in database:
        word = word.strip()
        word_list.append(word)

    database.close()

    index_word = random.randrange(1, len(word))
    secret_word = word[index_word].upper()                                        
    return secret_word

def word_spot(secret_word):
    return ["_" for word in secret_word]

def user_input():  
    shot = input("Digite uma letra: ")
    shot = shot.strip().upper()
    return shot

def word_validate(secret_word, hit_word, shot):
    index = 0
    for word in secret_word:
        if(shot == word):
            hit_word[index] = word
        index += 1

def user_lost():
    print("Foi enforcado! :(")

def user_win():
    print("Você acertou, parabéns!!")

if __name__ == "__main__":
    play()
#####################
*** Jogo da Forca ***
#####################
['_']
Digite uma letra: a
['A']
Digite uma letra: f
['A']
Digite uma letra: g
['A']
Digite uma letra:
1 resposta

Olá Leonardo, tudo bem com você?

No método random_word no momento da declaração do índice (index_word) está ocorrendo a chamada da variável word que contém uma palavra e não a variável word_list que contém a lista de palavras, basta realizar o uso da variável word_list.

O índice inicial está considerando a segunda palavra, a contagem inicia a partir do zero, assim devemos trocar o 1 por 0 no método randrange.

Abaixo as linhas do método random_word que passaram por mudanças.

  • index_word = random.randrange(0, len(word_list))
    • word trocado por word_list.
    • O índice inicial foi trocado de 1 para 0 assim a primeira palavra da lista será considerada, a contagem inicia pelo zero.
  • secret_word = word_list[index_word].upper()
    • word trocado por word_list.

Método completo para comparação

def random_word():
    database = open("secret_word.txt","r")
    word_list = []

    for word in database:
        word = word.strip()
        word_list.append(word)

    database.close()

    index_word = random.randrange(0, len(word_list))
    secret_word = word_list[index_word].upper()
    return secret_word

Fico à disposição em caso de dúvidas.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!