1
resposta

Forca: else ativa sempre que acerto uma letra e perco 1 tentativa

no caso eu gostaria q erros/tentativas fossem contados apenas quando erra a letra(que eu creio que deveria a função de else nesse caso não?), porem no caso está contando apenas quando acerto, como consertar isso? meu codigo aparentemente está igual ao do professor, até o momento da postagem estou na primeira atividade da ultima aula.

import random

def jogar():

mensagem_abertura()
palavrasecreta = carrega_palavra_secreta()
letras_acertadas = inicializa_letras_acertadas(palavrasecreta)
letras_faltando = str(letras_acertadas.count('_'))
print('A palavra contêm {} letras.'.format(letras_faltando))

enforcou = False
acertou = False
tentativas = 5
print('Você pode errar '+str(tentativas)+' vezes.')
while(not enforcou and not acertou):

    chute = input('Qual letra? ')
    chute = chute.strip().upper()

    if (chute in palavrasecreta):
        index=0
        for letra in palavrasecreta:
            if(chute.upper() == letra.upper()):
                letras_acertadas[index] = letra
            index += 1
        else:
            tentativas -= 1
            print('Errou, você tem {} tentativas.'.format(tentativas))

    enforcou = tentativas == 0
    acertou = '_' not in letras_acertadas
    print(letras_acertadas)


    if(acertou):
        print('Ganhou!')

print('enforcou '+str(enforcou))
print('acertou '+str(acertou))
print('fim do jogo')

def mensagem_abertura(): print('') print('Bem vindo ao jogo de forca!') print('')

def carrega_palavra_secreta(): arquivo = open("palavras.txt", "r") palavras = []

for linha in arquivo:
    linha = linha.strip()
    palavras.append(linha)

arquivo.close()

numero = random.randrange(0,len(palavras))
palavrasecreta = palavras[numero].upper()
return palavrasecreta

def inicializa_letras_acertadas(palavra): return ['_' for letra in palavra]

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

1 resposta

Boa noite, Caio. Rodei o seu código aqui para entender o seu problema.

Percebi que a indentação do seu else não estava correta. Veja só a alteração que fiz:

        if (chute in palavrasecreta):
            index = 0
            for letra in palavrasecreta:
                if (chute.upper() == letra.upper()):
                    letras_acertadas[index] = letra
                index += 1
        else:
            tentativas -= 1
            print('Errou, você tem {} tentativas.'.format(tentativas))

Com o else na mesma hierarquia do if, a marcação de tentativas restantes funciona sem problemas.

Me diga se deu certo,

Abraços.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software