1
resposta

Erro ao repetir letra

Percebi que ao usar uma letra repetida o código fica em looping. Eu gostaria de fazer uma verificação na entrada de letras, mas depois do código "organizado" não sei onde posso implementar. Algumé pode me dar uma dica no raciocício? Eu pensei em um if e em usar letra != da entrada do usuário.

1 resposta

Olá Robson, tudo bem com você?

Fico feliz com que tenha levantado esse questionamento. Para implementarmos o código de forma que o usuário perca pontos ao repetir um chute já realizado, podemos criar uma lista que irá armazenar os chutes do usuário e realizar verificarmos a cada interação se o chute está nessa lista. As mudanças no código irão ocorrer na função jogar() presente no arquivo forca.py, conforme apresento abaixo.

Na função jogar adicionaremos uma nova lista, de nome chutes_realizados para receber os chutes do usuário, e realizaremos a verificação se o chute feito já se encontra nessa lista, caso esteja, adicionamos +1 a variável erros, desenhamos a forca e continuamos (continue) para a próxima execução do laço de repetição. Caso o chute não esteja na lista chutes_realizados ele será adicionado a lista. Conforme apresentado abaixo:

if chute in chutes_realizados:
    print('Foi informado uma letra repetida, tente novamente!')
    print("As seguintes letras {} já foram chutadas".format(chutes_realizados))
    erros += 1
    desenha_forca(erros)
    continue
chutes_realizados.append(chute)

Código completo da função jogar() com as mudanças já implementadas

def jogar():
    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0
    chutes_realizados = []

    while(not enforcou and not acertou):

        chute = pede_chute()

        if chute in chutes_realizados:
            print('Foi informado uma letra repetida, tente novamente!')
            print("As seguintes letras {} já foram chutadas".format(chutes_realizados))
            erros += 1
            desenha_forca(erros)
            continue
        chutes_realizados.append(chute)

        if(chute in palavra_secreta):
            marca_chute_correto(chute, letras_acertadas, palavra_secreta)
        else:
            erros += 1
            desenha_forca(erros)

        enforcou = erros == 7
        acertou = "_" not in letras_acertadas

        print(letras_acertadas)

    if(acertou):
        imprime_mensagem_vencedor()
    else:
        imprime_mensagem_perdedor(palavra_secreta)

No GIF abaixo apresento a execução do jogo forca com a implementação descrita acima.

GIF contendo a execução do jogo forca

Após as mudanças aplicadas, salve o arquivo antes de realizar uma nova execução.

Espero ter lhe ajudado. Em caso de dúvidas estou à disposição.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!