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

Funcionalidade OK mas o comando tá errado

Olá!

A funcionalidade está perfeita porém enquanto a gente coloca a letra já exibe a mensagem "Você perdeu!" fim do jogo , a quantidade de tentativas até acertar funciona, e quando a gente acerta printa a mensagem "Você ganhou" Fim do jogo. O que será que deve ser mudado para não imprimir Você perdeu fim de jogo depois de todas as tentativas?

#coding=utf-8

def jogar():
    print("************************************")
    print("*****Bem-vindo ao jogo da forca*****")
    print("************************************")

    palavra_secreta = "banana".upper()
    letras_acertadas = ["_", "_", "_", "_", "_", "_"]

    enforcou = False
    acertou = False
    erros = 0

    print(letras_acertadas)

    while(not enforcou and not acertou):

        chute = raw_input("Qual a letra?")
        chute = chute.strip().upper()

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

                index = index + 1

        else:
            erros = erros + 1

        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

        print("Fim do jogo")

        if(acertou):
            print("Você ganhou!!!")
        else:
            print("Você perdeu :(")



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

2 respostas
solução!

Faaala Nayma, tudo bem?

Observe que estas mensagens estão ocorrendo a todo momento porque elas estão dentro do laço de repetição: while. Então, para mudar este comportamento, basta retirá-las do laço. Algo como:

while(not enforcou and not acertou):

        chute = raw_input("Qual a letra?")
        chute = chute.strip().upper()

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

                index = index + 1

        else:
            erros = erros + 1

        enforcou = erros == 6
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

    print("Fim do jogo")

    if(acertou):
        print("Você ganhou!!!")
    else:
        print("Você perdeu :(")

Observe que o define se as mensagens estão ou não dentro do laço while é a indentação do código, ou seja, a quantidade de recuos do mesmo. Na imagem abaixo, veja a linha que demonstra que o while está na mesma indentação que as mensagens de: print("Fim do jogo"), o que quer dizer que esta mensagem está fora do laço while.

jogodaforcaidentacao

Sendo assim, obterá o resultado:

jogodaforcaacertou

jogodaforca

Qualquer dúvida é só falar. Espero ter ajudado. Abraços e bons estudos!

eeeeba valeu, tô achando engraçado porque tenho as desconfianças do que possa ser, essa foi uma delas, algo estar fora do lugar mas ainda não sei o que e pra onde vai rsrsrsrs mas logo chego lá kkkk