2
respostas

[Projeto] melhorias no projeto

Tentei melhor o projeto, quase consegui porém, ficou bem aquém do que eu queria

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

    palavra_secreta = 'banana'

    enforcou = False
    acertou = False
    caracter = '_ '
    palavra_escondida = caracter * len(palavra_secreta)

    print(palavra_escondida)     

    while(not enforcou and not acertou):
            
        chute = input('Qual Letra: ')
        chute = chute.strip()
        index = 0
        for letra in palavra_secreta:
            if (chute.upper() == letra.upper()):
                #print('Encontrei a Letra {} na posição {}'.format(letra, index + 1))
                posicao_para_substituir = index
                letra_revelada = palavra_escondida[:index] + chute + palavra_escondida[:index + 1:]
                print(letra_revelada)
            index = index + 1    
            
    
    


    print("Fim de Jogo!")
if(__name__ == "__main__"):
    jogar()

o problema dele é que a saída ficou assim


Bem vindo ao jogo de Forca!



Qual Letra: a

a

_ a _

_ _ a _ _ Qual Letra:

quando na verdade queria que substituísse todos no mesmo print

2 respostas

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

palavra_secreta = 'banana'

enforcou = False
acertou = False
caracter = '_'
palavra_escondida = caracter * len(palavra_secreta)

print(palavra_escondida)     

while(not enforcou and not acertou):
  
  print('Somente uma letra por vez')
  chute = input('Qual letra: ')
  chute = chute.strip()
  index = 0
  palavra_revelada = palavra_escondida  # Inicializa com o estado atual
  
  for letra in palavra_secreta:
      if (chute.upper() == letra.upper()):
          posicao_para_substituir = index
          palavra_revelada = palavra_revelada[:index] + chute + palavra_revelada[index + 1:]
      index = index + 1
  
  print(palavra_revelada)
  palavra_escondida = palavra_revelada  # Atualiza a palavra escondida


print("Fim de Jogo!")

if(name == "main"): jogar()

Isso deve resolver seu problema amigo.

O problema ocorre quando você está tentando atualizar a palavra_revelada na linha letra_revelada = palavra_escondida[:index] + chute + palavra_escondida[:index + 1:]. Aqui, você está recriando palavra_revelada usando partes de palavra_escondida, mas a parte final (palavra_escondida[:index + 1:]) está incorreta. Essa parte deve ser palavra_escondida[index + 1:] para manter as letras que estão após a letra adivinhada.

A versão corrigida usa palavra_revelada = palavra_escondida[:index] + chute + palavra_escondida[index + 1:] para substituir corretamente a letra adivinhada na posição correta.

Além disso, é importante notar que você precisa atualizar a variável palavra_escondida fora do loop para manter o estado correto. A versão corrigida inclui a linha palavra_escondida = palavra_revelada para garantir que a palavra escondida seja atualizada com as letras adivinhadas. Isso permite que o jogo mantenha o controle adequado das letras reveladas até o momento.

Primeiramente obrigado pela resposta, ao usar seu código a saída fica assim


Bem vindo ao jogo de Forca!



Somente uma letra por vezQual letra: a Somente uma letra por vez Qual letra:

não chega a substituir o '_' pela letra

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