1
resposta

Loop Infinito (ainda rs) e dica da palavra

Decidi por seguir o andamento do instrutor e não implementar minha própria solução para verificar o acerto ou o "enforcamento" do jogador. Além disso, optei por utilizar a solução mais elegante do enumerate(), já que é bem conhecida e disponível pelo Python e já voltar para o início do loop caso o jogador não acerte nenhuma letra da palavra com seu chute. O jogador pode deduzir a palavra já que informei no início quantas letras têm e indico (utilizando a notação mais usual para os humanos de iniciar pelo 1 ao invés de 0) a posição de cada ocorrência na palavra. Segue o código.

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

    palavra_secreta = "zarabatana"
    enforcou = False
    acertou = False

    print(f"A palavra secreta tem {len(palavra_secreta)} letras")

    while not enforcou and not acertou:

        chute = input("Digite uma letra da palavra: ").strip().lower()

        if chute not in palavra_secreta:
            print("Essa letra não está na palavra secreta!")
            continue

        for i, letra in enumerate(palavra_secreta):
            if chute == letra:
                print(f"Encontrei a letra \"{letra}\" na posição {i+1} da palavra")

        print("Jogando...")

    print("Fim do jogo")


if __name__ == "__main__":
    jogar()
1 resposta

Não entendi muito bem qual era a sua dúvida, mais caso seja para que o loop pare, tem que fazer com que o "enforcou" ou "acertou" se torne verdadeiro, pois só assim ele irá interromper o loop e finalizar o jogo.

Por exemplo, vamos supor que quer acrescentar o caso de o jogo encerrar com 6 erros. Iniciaríamos declarando "erros = 0 " logo depois do "acertou = false".

palavra_secreta = "zarabatana"
    enforcou = False
    acertou = False
    erros = 0

e dentro do loop, cada vez que ele errar uma letra, acrescentará "+1" em erros. E assim quando a quantidade de erros for igual à 6. o loop irá acabar. Essa parte ficaria assim, logo depois do input:

if chute not in palavra_secreta:
            print("Essa letra não está na palavra secreta!")
            erros += 1    # Esse jeito de escrever é o mesmo que escrever "erros = erros + 1"
            continue

e antes do

        print("Jogando...")

coloque

if erros == 6:
    enforcou = True

Isso seria uma das formas de encerrar o loop, acrescentando uma quantidade de erro, esse é um jeito bem simples e menos complicado para que ele encerre.

Espero ter ajudado em algo. Caso não for essa a dúvida, estou aqui qualquer coisa.

Bons estudos!!