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

Retorno de letras acertadas é mostrado várias vezes, como um loop.

Boa noite pessoal, de antemão já desejo bons estudos pra todes.

Bom, meu código está funcionando, porém ele mostra a lista de letras acertadas (dentro da palavra) 7X, que é o número de letras na palavra secreta.

Abaixo incluo os trechos do código relacionados à devolutiva da palavra para o usuário para facilitar. Após indico o retorno errático que mencionei e no final incluo o código completo.

palavra_secreta = "bolinho"
letras_acertadas = ["_","_","_","_","_","_","_"]
.
.
.

print (letras_acertadas)
.
.
.
if len(chute)>1:
        print("Informe apenas uma letra")
        continue
    index = 0
    for letra in palavra_secreta:
        if(chute.upper() == letra.upper()): 
                letras_acertadas[index] = letra

        index = index + 1

        print (letras_acertadas)
        print ("\nJogando...")

E o resultado, caso eu tenha chutado "O": QUAL SEU CHUTE? o ['', '', '', '', '', '', '_']

Jogando... ['', 'o', '', '', '', '', '']

Jogando... ['', 'o', '', '', '', '', '']

Jogando... ['', 'o', '', '', '', '', '']

Jogando... ['', 'o', '', '', '', '', '']

Jogando... ['', 'o', '', '', '', '', '']

Jogando... ['', 'o', '', '', '', '_', 'o']

Jogando...

CÓDIGO COMPLETO, SE NECESSÁRIO

def jogo_forca(): #O "DEF" CRIA UMA FUNÇÃO CUSTOMIZADA PARA CHAMAR O JOGO EM OUTRO CÓDIGO

print ("*************************")
print ("*******BEM VINDE*********")
print ("***VAMO JOGAR FORCAAA***\n")

palavra_secreta = "bolinho"
letras_acertadas = ["_","_","_","_","_","_","_"]
#booleano
enforcou = False 
acertou = False  

print (letras_acertadas)

while (not enforcou and not acertou): #laço inicial do jogo 
    #verificações do chute
    chute = input("\n**QUAL SEU CHUTE?**\n")
    chute = chute.strip() #strip verifica e retira espaços no início e no final do chute

    if len(chute)>1:
        print("Informe apenas uma letra")
        continue
    index = 0
    for letra in palavra_secreta:
        if(chute.upper() == letra.upper()): 
                letras_acertadas[index] = letra
            #print ("Encontrei a letra {} na posição {} da palavra secreta".format(letra,index))
        index = index + 1

        print (letras_acertadas)
        print ("\nJogando...")



print("FIM DO JOGO")

O que pode estar acontecendo?

2 respostas
solução!

Karol, segue o código debugado:

print ("*************************")
print ("*******BEM VINDE*********")
print ("***VAMO JOGAR FORCAAA***\n")

palavra_secreta = "bolinho"
letras_acertadas = ["_","_","_","_","_","_","_"]
#booleano
enforcou = False
acertou = False

print (letras_acertadas)

while (not enforcou and not acertou): #laço inicial do jogo
    #verificações do chute
    chute = input("\n**QUAL SEU CHUTE?**\n")
    chute = chute.strip() #strip verifica e retira espaços no início e no final do chute

    if len(chute)>1:
        print("Informe apenas uma letra")
        continue
    index = 0
    for letra in palavra_secreta:
        if(chute.upper() == letra.upper()):
                letras_acertadas[index] = letra
            #print ("Encontrei a letra {} na posição {} da palavra secreta".format(letra,index))
        index = index + 1

    print (letras_acertadas)
    print ("\nJogando...")



print("FIM DO JOGO")

Você precisa atentar para as indentações. Colocar os prints de letras acertadas dentro do LOOP FOR não faz sentido... Fora isso, tava tudo de boa.

Puxa, entendi! Valeu Rosemeri, já vi q python realmente é bem exigente c indentação.

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