Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Problema na Função

Boa tarde, Instrutor.

Estou com um problema na hora se inserir as letras na forca.

Meu código:

import random


def play():
    welcome()

    secret_word = load_secret_word()

    got_hint = ["_" for word in secret_word]

    lost_game = False
    win_game = False
    error = 0

    game(lost_game, win_game, got_hint, secret_word, error)

    winner(win_game, got_hint, secret_word)

    print("Fim do jogo")


def welcome():
    print("************************************")
    print("****Bem vindo ao jogo da Forca!****")
    print("************************************")


def load_secret_word():
    list_word = ["Python", "Java", "JavaScript", "Ruby", "PHP", "Swift", "GoogleGo"]
    list_word = list_word[random.randrange(0, len(list_word))]
    secret_word = list_word.lower()
    return secret_word


def game(lost, win, hints, word, err):
    while ((not lost) and (not win)):
        print("Dica: Linguagem de Programação")
        print(hints)

        user_try = input("Digite uma letra: ")
        user_try = user_try.strip().lower()

        if (user_try in word):
            index = 0
            for word in word:
                if (user_try == word):
                    hints[index] = word
                index += 1
        else:
            err += 1
            print(f"Você ainda possui {6 - err} tentativas")

        lost = err == 6
        win = "_" not in hints


def winner(win, hints, word):
    if (win):
        print(hints)
        print(f"Parabéns!! Você acertou a palavra secreta: {word.capitalize()}")
    else:
        print("Infelizmente não foi dessa vez :(")
        print(f"A palavra secreta era {word.capitalize()}")


if (__name__ == "__main__"):
    play()

4 respostas

Eu ainda não descobri a razão do erro, acredito que seja devido a função game, porém após assistir algumas aulas, atualizei para este código:

import random


def play():
    welcome()

    secret_word = random_word()

    got_hint = ["_" for word in secret_word]

    lost_game = False
    win_game = False
    error = 0

    print("Dica: Linguagem de Programação")

    while ((not lost_game) and (not win_game)):
        print(got_hint)

        user_try = input("Digite uma letra: ")
        user_try = user_try.strip().lower()

        if (user_try in secret_word):
            index = 0
            for word in secret_word:
                if (user_try == word):
                    got_hint[index] = word
                index += 1
        else:
            error += 1
            hangman_body(error)
            print(f"Você ainda possui {7 - error} tentativas")

        lost_game = error == 7
        win_game = "_" not in got_hint

    if (win_game):
        winner(got_hint, secret_word)
    else:
        loser(secret_word)

    print("Fim do jogo")


def welcome():
    print("************************************")
    print("****Bem vindo ao jogo da Forca!****")
    print("************************************")


def random_word():
    list_word = ["Python", "Java", "JavaScript", "Ruby", "PHP", "Swift", "GoogleGo"]
    list_word = list_word[random.randrange(0, len(list_word))]
    secret_word = list_word.lower()

    return secret_word


def hangman_body(error):
    print("  _______     ")
    print(" |/      |    ")

    if (error == 1):
        print(" |      (_)   ")
        print(" |            ")
        print(" |            ")
        print(" |            ")

    if (error == 2):
        print(" |      (_)   ")
        print(" |      \     ")
        print(" |            ")
        print(" |            ")

    if (error == 3):
        print(" |      (_)   ")
        print(" |      \|    ")
        print(" |            ")
        print(" |            ")

    if (error == 4):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |            ")
        print(" |            ")

    if (error == 5):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |            ")

    if (error == 6):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      /     ")

    if (error == 7):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      / \   ")

    print(" |            ")
    print("_|___         ")
    print()


def winner(got_hint, secret_word):
    print(got_hint)
    print(f"Parabéns!! Você acertou a palavra secreta: {secret_word.capitalize()}")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")


def loser(secret_word):
    print("Puxa, você foi enforcado :(")
    print(f"A palavra secreta era {secret_word.capitalize()}")
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")


if (__name__ == "__main__"):
    play()

Oi, Alberth! Tudo certo?

Isso mesmo, Alberth. O problema está na função game()!

Neste trecho de código, você está utilizando a variável word tanto para percorrer a palavra secreta quanto para comparar com a letra digitada pelo usuário. Isso está causando um erro, pois a variável word está sendo sobrescrita e não está mais representando a palavra secreta.

Para corrigir isso, você pode utilizar uma variável diferente para percorrer a palavra secreta, como mostro no exemplo a seguir:

for letter in word:
  if (user_try == letter):
      hints[index] = letter
  index += 1

Dessa forma, a variável letter será utilizada para percorrer a palavra secreta e comparar com a letra digitada pelo usuário.

Espero ter ajudado, Alberth! Se surgirem novas dúvidas, estarei por aqui.

Um abraço.

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

Obrigado, Andrieli. Realemente era isso, agora as palavras estão sendo preenchidas. Mas me deparei c outro erro (na hora de definir o vencedor) :(

solução!

Oi, Alberth!

Não se preocupe, vamos resolver esse problema juntos.

Inicialmente, para termos a informação acerca da possível vitória do jogador, é importante que a função game() retorne esse dado. Nesse sentido, na sua parte final retornaremos o valor de win, desta forma:

def game(lost, win, hints, word, err):
    while (not lost) and (not win):
        print("Dica: Linguagem de Programação")
        print(hints)

        user_try = input("Digite uma letra: ")
        user_try = user_try.strip().lower()

        if user_try in word:
            index = 0
            for letter in word:
                if user_try == letter:
                    hints[index] = letter
                index += 1
        else:
            err += 1
            print(f"Você ainda possui {6 - err} tentativas")

        lost = err == 6
        win = "_" not in hints
    
    # Retornando o valor presente na variável win
    return win

Além disso, para uma avaliação correta de se o jogador ganhou o jogo ou não, precisamos resgatar o resultado obtido por game() e atribuí-lo a uma variável que será coletada pela função winner(). Isso será feito dentro da função play(), como mostra o exemplo a seguir:

def play():
    welcome()

    secret_word = load_secret_word()
    got_hint = ["_" for word in secret_word]

    lost_game = False
    win_game = False
    error = 0
    
    # Atribuindo o resultado de game() à variável win_game 
    win_game = game(lost_game, win_game, got_hint, secret_word, error)
    winner(win_game, got_hint, secret_word)

    print("Fim do jogo")

Após essas alterações, teremos uma mensagem condizente com o desempenho do jogador!

Espero que dê tudo certo, Alberth!

Abraços.