4
respostas

Meu programa mostra as posições erradas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

4 respostas

Olá Cesar, tudo bem com você?

A indentação em Python é algo muito importante, no seu código possui alguns pontos que ela precisa ser modificada para que funcione conforme a lógica pedida pela aula.

Existem três pontos que precisam ser modificados mudando a indentação, deixo abaixo os locais:

Primeira parte

    while(not enforcou and not acertou):

        chute = input("Qual letra? ")
        posicao = 0
        for letra in palavra_secreta:

Você deverá mudar o local onde declara a variável posicao, é necessário que ela fique dentro do laço while e antes do for letra in palavra_secreta: conforme mostrado acima.

Segunda parte

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

Deixar o posicao = posicao + 1 fora do laço if, fazendo dessa forma, a cada letra analisada será adicionado um 1 na variável posicao, e retornando corretamente a posição da letra escolhida.

Terceira parte

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

        print("jogando ...")

    print("Fim do jogo")

O comando print("jogando ...") deve ficar dentro do laço while(not enforcou and not acertou):

Fazendo essas modificações o seu código deve ficar conforme o postado abaixo:

def jogar():
    print("*********************************")
    print("***Bem vindo ao jogo da Forca!***")
    print("*********************************")

    palavra_secreta = "banana"

    enforcou = False
    acertou = False

    while(not enforcou and not acertou):

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

        print("jogando ...")

    print("Fim do jogo")

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

Para aprimorar o seu conhecimento, recomendo a leitura desse artigo: Indentation in Python, em português: Indentação em Python; caso tenha dificuldades com o idioma recomendo o uso do tradutor do navegador.

Conte sempre com a comunidade do fórum

Em caso de mais dúvidas me coloco à disposição.

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

só mais uma pergunta: pq dentro do if você botou "chute.upper ()"?

E eu não entendi pq o posição = posição +1 tem que estar fora do if. Ele não incrementa caso respeitar a condição?

Olá Cesar, tudo bem?

O chute.upper() e letra.upper() vão transformar os valores do tipo string que estão na variável em letras maiúsculas.

No nosso exemplo, estamos procurando uma letra dentro da palavra “banana”, se o usuário informar a letra “A” (maiúsculo) ele receberá uma informação de que essa letra não existe na palavra, usamos esse operador para transformar tudo em letra maiúscula, para evitar que erros assim aconteça.

Você pode ver uma explicação mais detalhada nessa aula: Funções importantes da String

Sobre o posicao = posicao + 1; se colocarmos ele dentro do If só será incrementado quando a palavra for encontrada. Temos que deixar ele fora para que ele incremente a cada teste de letra mesmo que a letra não seja encontrada.

Com iniciamos o teste da palavra na posição 0 e com a variável posição também valendo 0, queremos que o teste e a variável estejam com os mesmos valores, por isso temos que deixar ele em um local que irá incrementar a cada teste independente se a letra foi encontrada ou não.

Em caso de mais dúvidas me coloco à disposição.