2
respostas

Quantas tentativas faltam? - É possível diminuir a quantidade de if's?

Primeiro informo quantas tentativas o jogador possui. Enquanto ele tenta, se acertar, a mensagem de acerto aparece. Informando o restante de letras para terminar a palavra e a quantidade de tentativas que ele ainda possui.

Se ele errar, a mensagem de erro aparece. Informando novamente o restante de letras para terminar a palavra e informar a quantidade de tentativas rentantes.

Caso ele complete a palavra, a mensagem de que ele ganhou o jogo aparece, saindo do loop. Se ele ficar sem tentativas, ele perde e uma mensagem aparece informando que ele perdeu.

Consegui fazer, porém, não ficaram muitos if? É possível diminuir?

def jogar():
    print('**********************************')
    print('****Bem vindo ao Jogo da Forca****')
    print('**********************************')

    palavra_secreta = "banana"
    enforcou = False
    acertou = False
    letras_acertadas = ["_", "_", "_", "_", "_", "_"]
    tentativas = 6

    print(letras_acertadas)

    while not enforcou and not acertou:
        index = 0
        print(f"\nVocê tem {tentativas} tentativas para acertar a palavra secreta.")

        if tentativas > 0:
            chute = input("\nChute uma letra que possa fazer parte da palavra secreta: ")
            chute = chute.strip().lower()
            if chute in palavra_secreta:
                tentativas -= 1
                print(f"\nVocê acertou!!")
                for letra in palavra_secreta:
                    if chute == letra:
                        letras_acertadas[index] = letra
                        letras_faltando = str(letras_acertadas.count("_"))
                    index += 1

                if letras_faltando == "0":
                    print("\nVocê ganhou!! A palavra secreta foi descoberta. Parabéns!!")
                    acertou = True
                else:
                    print(f"Agora faltam {letras_faltando} letras para completar a palavra secreta.")
                    print(letras_acertadas)
            else:
                tentativas -= 1
                print(f"\nVocê errou!!")
                letras_faltando = str(letras_acertadas.count("_"))
                print(f"Ainda faltam {letras_faltando} letras para completar a palavra.")
                print(letras_acertadas)
        else:
            print("Você perdeu!! Suas tentativas acabaram.")
            enforcou = True

    print('\nFim do jogo')

if __name__ == '__main__':
    jogar()
2 respostas

Opa, Anderson!

Você poderia criar um laço com while para que ele faça esses "if's" para você!

 while (not enforcou and not acertou):

        chute = input("\nChute uma letra que possa fazer parte da palavra secreta: ")
        chute = chute.strip().lower()        

        if chute in palavra_secreta:
            index = 0
            for letra in palavra_secreta:
                if chute == letra:
                    letras_acertadas[index] = letra
                    letras_faltando = str(letras_acertadas.count("_"))
                index += 1

Ou seja, deixaria o código desta forma:

def jogar():
    print('**********************************')
    print('****Bem vindo ao Jogo da Forca****')
    print('**********************************')

    palavra_secreta = "banana"
    enforcou = False
    acertou = False
    letras_acertadas = ["_", "_", "_", "_", "_", "_"]
    tentativas = 6

    print(letras_acertadas)


    while (not enforcou and not acertou):

        chute = input("\nChute uma letra que possa fazer parte da palavra secreta: ")
        chute = chute.strip().lower()        

        if chute in palavra_secreta:
            index = 0
            for letra in palavra_secreta:
                if chute == letra:
                    letras_acertadas[index] = letra
                    letras_faltando = str(letras_acertadas.count("_"))
                index += 1


            if letras_faltando == "0":
                print("\nVocê ganhou!! A palavra secreta foi descoberta. Parabéns!!")
                acertou = True
            else:
                print(f"Agora faltam {letras_faltando} letras para completar a palavra secreta.")
                print(letras_acertadas)
        else:
            tentativas -= 1
            print(f"\nVocê errou!!")
            letras_faltando = str(letras_acertadas.count("_"))
            print(f"Ainda faltam {letras_faltando} letras para completar a palavra.")
            print(letras_acertadas)
    else:
        print("Você perdeu!! Suas tentativas acabaram.")
        enforcou = True

print('\nFim do jogo')

if __name__ == '__main__':
    jogar()

Espero ter ajudado!

Então, é que nesse caso ele já está dentro do laço. E o exemplo que você deu não informa a quantidade de tentativas, no caso, ele não tem chances de perder o jogo. Para implementar, eu acabaria criando mais um if kkkk