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

As letras não aparecem na ordem

Não sei o que mudou no meu código mas estava fazendo o mesmo que o professor e estava funcionando perfeitamente. Mas quando implementei o novo conteúdo as letras inseridas não ficam na ordem. Por exemplo, quando digito "i" aparece três i's na sequencia. Vou colocar aqui a forma com que o programa se desenvolve.

----------------------------
Bem vinde ao jogo de Forca
----------------------------
sua palavra tem 10 letras, boa sorte
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']
Digite uma letra i 
['I', 'I', 'I', '_', '_', '_', '_', '_', '_', '_']
Digite uma letra O
['O', 'I', 'I', '_', '_', '_', '_', '_', '_', '_']
Digite uma letra B 
['B', 'I', 'I', '_', '_', '_', '_', '_', '_', '_']

Aqui está o código:

def jogarForca():
    print("----------------------------")
    print ("Bem vinde ao jogo de Forca")
    print("----------------------------")

    palavra_secreta = "Obisidiana".upper()
    letra_acertada = ["_", "_", "_", "_", "_", "_", "_", "_", "_", "_"]

    enforcou = False
    acertou = False
    erros = 0

    print("sua palavra tem {} letras, boa sorte".format(len(letra_acertada)))
    print(letra_acertada)

    while(not enforcou and not acertou):

        chute = input("Digite uma letra")
        chute = chute.strip().upper()

        if(chute in palavra_secreta):
           index = 0
           for letra in palavra_secreta:
               if(chute == letra):
                   letra_acertada[index] = letra
                   index = index + 1

        else:
            print ("não tem essa letra na sua palavra")
            erros = erros + 1


        enforcou = erros == 6
        acertou = "_" not in letra_acertada

        print(letra_acertada)
    if (acertou):
        print ("Parabéns, você acertou a palavra")
    else:
        print ("que pena, você errou")

if(__name__== '__main__'):
        jogarForca()

Agradeço desde já, porque realmente não sei o que está acontecendo

2 respostas
solução!

Oii Iza, como você está? Espero que esteja bem ^-^

Isso está ocorrendo por causa de um pequeno detalhe nesse trecho:

if(chute == letra):
     letra_acertada[index] = letra
     index = index + 1

A indentação, ou seja, os recuos ou avanços (TABS) para informar qual trecho está dentro de qual está incorreto. A instrução index = index + 1 deve ficar fora do if. No caso do seu código essa instrução está dentro do if. Da forma como está, o index só será incrementado quando o usuário acertar a letra, porém, esse index deve ser incrementado ao percorrer cada letra da palavra para que encontre o index exato da letra e não somente quando uma letra é acertada. Veja como fica a correção:

if(chute == letra):
       letra_acertada[index] = letra
index = index + 1

Resultado:

----------------------------
Bem vinde ao jogo de Forca
----------------------------
sua palavra tem 10 letras, boa sorte
['_', '_', '_', '_', '_', '_', '_', '_', '_', '_']
Digite uma letra: I
['_', '_', 'I', '_', 'I', '_', 'I', '_', '_', '_']
Digite uma letra: D
['_', '_', 'I', '_', 'I', 'D', 'I', '_', '_', '_']
Digite uma letra: A
['_', '_', 'I', '_', 'I', 'D', 'I', 'A', '_', 'A']

Qualquer dúvida estou por aqui, tá bom?

Grande abraço!

Muito obrigada, me ajudou muitoo

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