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

Saída do jogo da forca

Olá pessoal. Tudo bom?

Estou tentando fazer uma saída alternativa do jogo da forca. Porém estou com dificuldades em umas das minhas propostas

O meu jogo irá terminar de duas formas :

  • O usuário tem x chances para acertar (x = numero de letras da palavra) --> perde
  • Usuário acerta a palavra (lista de palavras acertadas = lista da palavra secreta) ---> ganha

estou com dificuldade na segunda saída. Ainda me perco muito com variáveis booleanas. No jeito do vídeo está claro a lógica mas não deveria dar erro dessa forma tambem. O código esta muito perto do codigo dos videos

Desde já muito obrigado!

import random

def jogar_forca():
    print('Jogo da Forca')

##leitura do arquivo com palavras
    arquivo = open('palavras.txt', 'r')
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()

##escolha da palavra aleatória
    numero = random.randrange(0, len(palavras))
    palavra_secreta = palavras[numero]
    letras_acertadas = []
    letras_erradas = []
    for i in range(0, len(palavra_secreta)):
        letras_acertadas.append('_')

##algumas considerações
    enforcou = False
    acertou = False
    erros = 0
    tentativas = len(palavra_secreta)


    while (not enforcou and not acertou):

        print(f'Sua palavra tem {len(palavra_secreta)} letras, `{letras_acertadas}.'
              f'Suas letras erradas {letras_erradas}')
        chute = input('Diga uma letra: ').upper().strip()

##parte que suponho esta o erro
        if chute in palavra_secreta.upper():
            index = 0
            for letra in palavra_secreta.upper():
                if chute == letra:
                    print(f'Encontrou a letra {chute} na posição {index+1}')
                    letras_acertadas[index] = letra
                    ###acredto que o erro esteja aqui
                    acertou = list(palavra_secreta) == letras_acertadas
                    if acertou == True:
                        print(f'Você acertou a palavra {letras_acertadas},'
                        f' E suas letras erradas foram {letras_erradas}')
                index = index + 1

        else:
            erros = erros + 1
            letras_erradas.append(chute)
            print(f'Você errou! Sua palavra é {letras_acertadas}, E suas letras erradas foram {letras_erradas}')
            enforcou = erros == len(palavra_secreta)
            print(f'Você errou, agora tem somente {tentativas-erros} tentativas')


    print('FIM do JOGO')



if (__name__ == '__main__'):
    jogar_forca()
3 respostas
solução!

Bom dia Victor, tudo bem?

A lógica do seu código está toda correta, o detalhe é que a lista list(palavrasecreta) está sendo escrita com letras minúsculas, enquanto que a lista letras_acertadas está sendo escrita com letras maiúsculas. Logo, mesmo que as palavras sejam as mesmas, a variável booleana 'acertou' nunca recebia o valor True, permanecendo no laço. A alteração descrita abaixo deve ser suficiente para corrigir seu código. Eeu apenas garanti que as letras da lista list(palavrasecreta) também estariam em maiúsculo. Bons estudos!

acertou = list(palavra_secreta.upper()) == letras_acertadas

Muito obrigado! Passei um bom tempo aqui tentando resolver e com sua linha deu certo!! uhul

muito obrigado de novo

Disponha Victor. Sempre que tiver uma dúvida parecida com essa, tenta usar o Debug do Pycharm. Ele executa o código linha a linha e você consegue acompanhar a atualização das variáveis. Acredito que nos cursos futuros eles devem apresentar essa ferramenta. Até a próxima!