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

Não substitui o "_" por uma letra

`#parte do while chute = pede_chute()

    if(chute in palavra_secreta):
        marca_chute_correto(chute, palavra_secreta, letras_acertadas, tentativas)

    else:
        tentativas -= 1
        print("ERRRRRRRRROOOOOUUUU")
        print("Faltam {} tentativas".format(tentativas))
        return tentativas

enforcou = tentativas == 0
acertou = "_" not in letras_acertadas

#parte das definições

def pede_chute():
    chute = input("Insira uma letra: ")
    chute = chute.strip().upper()

    return chute

def marca_chute_correto(palavra_secreta, chute, letras_acertadas, tentativas):
    index = 0
    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
            print("Você acertou uma letra!")
            print("Faltam {} tentativas".format(tentativas))

Eu chequei diversas vezes e para mim o código modelo e o meu estão iguais. A única diferença é o uso das tentativas no lugar do erro - que vão de 10 até 0. Quando insiro uma letra certa, ele não me retorna a letra substituída e nem avisa que eu acertei. Vocês poderiam me ajudar? Obrigado!

5 respostas

Oi João tudo bem?

Poderia, por gentileza, passar o código completo (ou se está em vários arquivos colocar a pasta do projeto no github). Dessa forma consigo analizar melhor o que está acontencendo.

solução!

Oi João tudo bem ?

Dei uma arrumada no seu código. Se subir pro seu gist dá pra ele realçar as mudanças.

import random

def jogar():

    imprime_mensagem_abertura()
    palavra_secreta = define_palavra_secreta()

    letras_acertadas = inicializa_letra_acertada(palavra_secreta)
    print(letras_acertadas)





    acertou = False
    tentativas = 0

    while(True):
      chute = pede_chute()

      if(chute in palavra_secreta):
        marca_chute_correto(palavra_secreta, chute, letras_acertadas)

      else:
        tentativas += 1
        desenha_forca(tentativas)



      acertou = "_" not in letras_acertadas

      print(letras_acertadas)

      if(acertou):
        mensagem_ao_vencedor()
        print("Fim do Jogo")

      if(tentativas > 7):
        mensagem_ao_perdedor(palavra_secreta)
        print("Fim do Jogo")







def imprime_mensagem_abertura():
    print("******************************")
    print("**Bem vindo ao jogo de Forca**")
    print("******************************")


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

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

    arquivo.close()

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

def inicializa_letra_acertada(palavra):
    return ["_" for letra in palavra]


def pede_chute():
    chute = input("Insira uma letra: ")
    chute = chute.strip().upper()

    return chute


def marca_chute_correto(palavra_secreta, chute, letras_acertadas):
    index = 0

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

      index += 1

    return letras_acertadas

def desenha_forca(tentativas):
    print("  _______     ")
    print(" |/      |    ")

    if(tentativas == 1):
        print(" |      (_)   ")
        print(" |            ")
        print(" |            ")
        print(" |            ")

    if(tentativas == 2):
        print(" |      (_)   ")
        print(" |      \     ")
        print(" |            ")
        print(" |            ")

    if(tentativas == 3):
        print(" |      (_)   ")
        print(" |      \|    ")
        print(" |            ")
        print(" |            ")

    if(tentativas == 4):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |            ")
        print(" |            ")

    if(tentativas == 5):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |            ")

    if(tentativas == 6):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      /     ")

    if (tentativas == 7):
        print(" |      (_)   ")
        print(" |      \|/   ")
        print(" |       |    ")
        print(" |      / \   ")

    print(" |            ")
    print("_|___         ")
    print()


def mensagem_ao_vencedor():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")


def mensagem_ao_perdedor(palavra_secreta):
    print("Puxa, você foi enforcado!")
    print("A palavra era {}".format(palavra_secreta))
    print("    _______________         ")
    print("   /               \       ")
    print("  /                 \      ")
    print("//                   \/\  ")
    print("\|   XXXX     XXXX   | /   ")
    print(" |   XXXX     XXXX   |/     ")
    print(" |   XXX       XXX   |      ")
    print(" |                   |      ")
    print(" \__      XXX      __/     ")
    print("   |\     XXX     /|       ")
    print("   | |           | |        ")
    print("   | I I I I I I I |        ")
    print("   |  I I I I I I  |        ")
    print("   \_             _/       ")
    print("     \_         _/         ")
    print("       \_______/           ")


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

Espero ter ajudado!!!

Legal, André! Está funcionando direitinho agora! Eu só não consegui entender por que não estava imprimindo as letras antes. A ordem que eu coloco os parâmetros na função importa? Porque vi que você trocou "chute" e "palavra_secreta" de lugar na linha 22. De qualquer jeito, muito obrigado pela ajuda!

A ordem dos parâmetros da função importa sim, tem que ser na mesma ordem. Isso que tava causando o erro maior , aí estourou alguns errinhos pequenos como de indentação e troquei a condição do while principal também porque já tava verificando lá embaixo o fim do jogo com if.

Mas tava legal o código, continue assim e bons estudos!!!

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