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

O If e o Else não estão funcionando corretamente

Quando digito qualquer letra mesmo estando dentro da palavra secreta aparece a frase definida no ELSE: print("Você foi enforcado...") e não estar considerando as 6 tentativas. Ja estou a dias tentando realizar a identação disso mas não consegui. Sou cego e gostaria de saber se tem ou existe alguma configuração para a identação ficar automatica no Python isto iria me ajudar muito! Segue o codigo para analise:

def jogar(): print("***") print("Benvindo ao Jogo da Forca!") print("***")

palavra_secreta = "banana".upper()
letras_acertadas = ["_", "_", "_", "_", "_", "_"]
enforcou = False
acertou = False
erros = 0

print(letras_acertadas)

while (not acertou and not enforcou):
    chute = input("Qual Letra?")
    chute = chute.strip().upper()
    index = 0

    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index += 1
    else:
        erros += 1
        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
        if(acertou):
            print("Parabéns! Você acertou! A palavra era: {}".format(palavra_secreta))
        else:
            print("Você foi enforcado....")

print("Fim do jogo")

if (name == "main"): jogar()

5 respostas
solução!

Olá, tudo bem Leandro.

a identação do codigo abaixo esta errada, esta dentro do while:

        if(acertou):
            print("Parabéns! Você acertou! A palavra era: {}".format(palavra_secreta))
        else:
            print("Você foi enforcado....")

Coloque a com a mesma identação do while e irá funcionar.

palavra_secreta = "banana".upper()
letras_acertadas = ["_", "_", "_", "_", "_", "_"]
enforcou = False
acertou = False
erros = 0

print(letras_acertadas)

while (not acertou and not enforcou):
    chute = input("Qual Letra?")
    chute = chute.strip().upper()
    index = 0

    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index += 1
    else:
        erros += 1
        enforcou = erros == 7
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

if acertou:
    print("Parabéns! Você acertou! A palavra era: {}".format(palavra_secreta))
else:
    print("Você foi enforcado....")

print("Fim do jogo")

Grande abraço.

life = 'hard'

if life == 'hard':
    print('smile')

Olá Leandro, como vai? Legal a ideia do seu jogo. Eu fiz algumas modificações pra te ajudar e acho melhorou.

1 ª modificação)

Este trecho:

    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index += 1

Troquei pelo trecho a seguir, o qual tem uma flag para indicar que houve pelo menos um acerto:

  for letra in palavra_secreta:
        flag_acerto = False 
        if (chute == letra):
            letras_acertadas[index] = letra
            flag_acerto = True 
        index += 1

2 ª modificação)

Troquei o primeiro "else" do seu código:

else:
         erros += 1
        enforcou = erros == 6

Por "if" no trecho a seguir, para verificar se não houve nenhum acerto:

if not flag_acerto:
         erros += 1
        enforcou = erros == 6

3 ª modificação)

Por fim, no seu último "else":

 else:
            print("Você foi enforcado....")

Troquei pelo trecho a seguir, para verificar se houve 6 erros:

    elif(enforcou): 
            print("Você foi enforcado....")

Na explicação anterior que fiz, um detalhe importante é que a ideia das identações do código original se manteve, ok. O código final ficou assim:

palavra_secreta = "banana".upper()
letras_acertadas = ["_", "_", "_", "_", "_", "_"]
enforcou = False
acertou = False
erros = 0
flag = False
print(letras_acertadas)

while (not acertou and not enforcou):
    chute = input("Qual Letra?")
    chute = chute.strip().upper()
    index = 0

    for letra in palavra_secreta:
        flag_acerto = False # inicialmente nao tem nenhum acerto
        if (chute == letra):
            letras_acertadas[index] = letra
            flag_acerto = True # houve pelo menor um acerto
        index += 1
    if not flag_acerto: # troquei "else" por este "if" para verificar se nao teve nenhum acerto
        erros += 1
        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)
        if(acertou):
            print("Parabéns! Você acertou! A palavra era: {}".format(palavra_secreta))
        elif(enforcou):  #troquei o "else" pelo "elif" para verificar se houve extamente 6 erros
            print("Você foi enforcado....")

print("Fim do jogo")

Gente muito obrigado por todas as dicas! Para manter o raciocínio do jogo do curso, resolvi manter o mesmo código do Nico. Me ajudaria muito mesmo se existisse forma de identar este código no pichar automático. Não sei o que eu fiz mais foi assim: Eu apaguei toda a indentação do código e selecionei da linha abaixo do def jogar() até o uma linha antes do if (name == "main"): jogar() e dei o espaço com a tecla tabe! Pronto código funcionando!

def jogar():
    print("***********************************")
    print("Benvindo ao Jogo da Forca!")
    print("***********************************")

    palavra_secreta = "banana".upper()
    letras_acertadas = ["_", "_", "_", "_", "_", "_"]
    enforcou = False
    acertou = False
    erros = 0

    print(letras_acertadas)

    while (not acertou and not enforcou):
        chute = input("Qual Letra?")
        chute = chute.strip().upper()
        index = 0

        for letra in palavra_secreta:
            if (chute == letra):
                letras_acertadas[index] = letra
            index += 1
        else:
            erros += 1
            enforcou = erros == 6
            acertou = "_" not in letras_acertadas
            print(letras_acertadas)

    if acertou:
        print("Parabéns! Você acertou! A palavra era: {}".format(palavra_secreta))
    else:
        print("Você foi enforcado....")

    print("Fim do jogo")





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

            Não sei se quando colei aqui o código acima se bagunsou! Mas, enfim, consegui depoiss de varios dias tentando! Valeu pessoal!