1
resposta

[Dúvida] Função random.randragem retornam letras aleatorias

Ao implementar a função ele retorna valores aleatorios sempre na primeira posição.

import random

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

    arquivo = open("palavra.txt", "r" ,encoding="utf-8")
    palavras = []

    with open("palavra.txt") as arquivo:
        for linha in arquivo:
            linha = linha.strip()
            palavras.append(linha)

    arquivo.close()


    numero = random.randrange(0,len(palavras))

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


    enforcou = False
    acertou = False

    print(letras_acertadas)
    while(not acertou and not enforcou):

        chute = input("Qual letra? ")
        chute = chute.strip()

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

                index = index + 1

        print(letras_acertadas)
        print("Fim de Jogo")


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

1 resposta

Olá Raphael, tudo bem com você?

Peço desculpas pela demora no retorno.

O comportamento apresentado está acontecendo devido a não atribuição do valor +1 a variável index no laço de repetição for e após a estrutura condicional elif, fazendo com que as letras encontradas sejam adicionadas no índice errado. O laço for deve ser declarado da seguinte forma:

for letra in palavra_secreta:
    if (chute.upper() ==  letra.upper()):
        letras_acertadas[index] = letra
    elif(len(letras_acertadas[index]) == len(palavra_secreta)):
        index = index + 1
    index = index + 1

Código completo com as mudanças aplicadas

import random


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

    arquivo = open("palavra.txt", "r", encoding="utf-8")
    palavras = []

    with open("palavra.txt") as arquivo:
        for linha in arquivo:
            linha = linha.strip()
            palavras.append(linha)

    arquivo.close()

    numero = random.randrange(0, len(palavras))

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

    enforcou = False
    acertou = False

    print(letras_acertadas)
    while (not acertou and not enforcou):

        chute = input("Qual letra? ")
        chute = chute.strip()

        index = 0
        for letra in palavra_secreta:
            if (chute.upper() == letra.upper()):
                letras_acertadas[index] = letra
            elif (len(letras_acertadas[index]) == len(palavra_secreta)):
                index = index + 1
            index = index + 1
        print(letras_acertadas)
        print("Fim de Jogo")


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

Feita a mudança apresentada acima, salve o arquivo e realize nova execução do código.

Agora basta acompanhar o passo a passo da aula Mãos na massa: Palavras aleatórias no jogo para implementar o código. Lembre-se de clicar no botão Ver opinião do instrutor, assim será apresentado o código da aula.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

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

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