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

Dúvida no laço 'while'

def jogar():
    print("*********************************")
    print("***Bem vindo ao jogo de Forca!***")
    print("*********************************", end='\n\n')

    palavra_secreta = "banana".upper()

    letras_acertadas = ["_", "_", "_", "_", "_", "_"]

    enforcou = False
    acertou = False
    erros = 0

    print("Palavra a descubrir: ", letras_acertadas, end='\n\n')

    while not enforcou and not acertou:
        chute = input("Digite uma letra: ")

        chute = chute.strip().upper()

        print()

        if chute in palavra_secreta:
            posicao = 0

            for letra in palavra_secreta:
                if chute == letra:
                    letras_acertadas[posicao] = letra
                posicao += 1
        else:
            erros += 1

        enforcou = erros == 6

        acertou = "_" not in letras_acertadas

        print(letras_acertadas, end='\n\n')

    if acertou:
        print("Você venceu! Parabéns!")
    else:
        print("Tente novamente!")

    print("Palavra secreta: ", palavra_secreta)
    print("Fim do jogo")

if __name__ == "__main__":
    jogar()

Minha dúvida é sobre o parâmetro 'while'. O professor usou 'not enforcou and not acertou'. Até aí tudo certo. Mas para sair do laço, somente se o valor dessas duas variáveis forem 'FALSE', estou certo? Mas pelo que eu vi aí, essas duas variáveis não vai mudar de valor para 'FALSE', somente para 'True'. Então, qual é a lógica de verificação para sair desse laço 'while'??

2 respostas
solução!

Para ficar dentro do laço 'while' a expressão que é verificada precisa ser verdadeira. Para isso, as duas variáveis precisam ser 'False' para que a condição 'not enforcou and not acertou' seja verdadeira no final, pois o 'not' inverte o valor de 'enforcou' e 'acertou' para 'True' na verificação.

Quando mais a frente no programa o valor de uma delas muda para 'True', na expressão de verificação do 'while' o 'not' altera o valor dela para 'False' fazendo a expressão 'not enforcou and not acertou' ser falsa e saindo do laço.

No caso do jogador enforcar:

enforcou == True
acertou == False

not enforcou == False
not acertou == True

not enforcou and not acertou == False

Obrigado!