3
respostas

Meu programa não encontra a letra.

Mesmo quando eu coloco uma letra que existe na palavra que eu escolhi, o programa não encontra ela. É como se ele pulasse a linha do for e fosse direto para o último print.

def jogar():
        print("**************************************")
        print("olá, bem-vindo ao jogo de forca!")
        print("**************************************")

        palavra_secreta = "banana"
        enforcou = False
        acertou = False

        while(not enforcou and not acertou):
                chute = input("Digite uma letra!")

                posicao = 0

                for letra in palavra_secreta:
                        if(chute == letra):
                                print("Encontrei a letra {} na posição {}".format(letra, posicao))
                        posicao = posicao + 1

                print("Não tem {} nesta palavra".format(letra))



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

Bom dia Anna, tudo bem? Espero que sim!

O último print sempre acontece porque não tem nenhuma condição para ser checada, então sempre após o for ele será executado. Além disso, o print está referenciando a letra e não ao chute que você digitou. Como o for percorre letra por letra e a última letra da palavra banana é "a", o print sempre mostrará: "Não tem a nesta palavra." já que a variável letra terá valor "a" no fim do for.

Sugiro criar uma variável para checar se foi encontrado a letra na palavra ou não e printar na tela somente quando não for encontrado. Aqui está um exemplo, substituindo a letra por chute:

def jogar():
        print("**************************************")
        print("olá, bem vindo ao jogo de forca!")
        print("**************************************")

        palavra_secreta = "banana"
        enforcou = False
        acertou = False

        while(not enforcou and not acertou):
                chute = input("Digite uma letra!")
                encontrou = False
                posicao = 0

                for letra in palavra_secreta:
                        if(chute == letra):
                                print("Encontrei a letra {} na posição {}".format(letra, posicao))
                                encontrou = True
                        posicao = posicao + 1

                if not encontrou:
                    print("Não tem {} nesta palavra".format(chute))

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

Espero que tenha tirado sua dúvida.

Estou à disposição. Bons estudos!

João, não tinha reparado no erro do último print, muito obrigada!

Antes de mandar essa dúvida, tentei estabelecer uma condição para esse último print usando um else.


                for letra in palavra_secreta:
                        if(chute == letra):
                                print("Encontrei a letra {} na posição {}".format(letra, posicao))
                        posicao = posicao + 1
                         else:
                                print("Não tem {} nesta palavra".format(chute))

Não funcionou e pareceu IndentationError: unexpected indent. Sabe me dizer o por quê?

Oi Anna,

O erro foi gerado porque o if e o else não estão completamente alinhados. O else tem um espaço a mais de indentação, então se você eliminar um espaço vai eliminar o problema.

Mas dessa forma o programa não vai funcionar como o esperado, uma vez que vai aparecer a mensagem Não tem "chute" nesta palavra para cada letra da palavra que for diferente do chute, já que o for vai executar o código uma vez para cada letra. Entendeu?

Estou à disposição.