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

Não consigo trazer variável da função

Olá pessoal, no meu código, eu separei a funcionalidade de escolher uma palavra secreta numa função à parte do código. Porém, quando preciso usar a variável palavra_secreta no escopo global, mesmo tendo dando return na função, o código não reconhece, dá erro 'name 'palavra_secreta' is not defined'.

import random

def jogar():

    exibe_mensagem_boas_vindas("Bem-vindo ao jogo da forca!")
    seleciona_palavra_secreta()

    enforcou = False
    acertou = False
    tentativas = 5
    esqueleto_palavra = ['_' for letra in palavra_secreta]
    lista_erros = []

    print(f'A palavra secreta tem {esqueleto_palavra.__len__()} letras. Boa sorte!')
    print(esqueleto_palavra)

    while not enforcou and not acertou:

        index = 0
        letra_chute = input('Digite uma letra: ').strip().upper()

        if letra_chute in palavra_secreta:
            for letra in palavra_secreta:
                if letra == letra_chute:
                    print(f'Tem a letra {letra_chute}. Ela está na posição {index}')
                    esqueleto_palavra[index] = letra
                index += 1
        else:
            if tentativas > 0:
                print(f'Não tem a letra {letra_chute} na palavra!')
                print(f'Ainda restam {tentativas} chances.')
                tentativas -= 1
            else:
                print('Suas tentativas acabaram. Você foi enforcado!')
                enforcou = True
                break

        print('Faltam {} letras para preencher.'.format(esqueleto_palavra.count('_')))
        print(esqueleto_palavra)

        acertou = '_' not in esqueleto_palavra

        if acertou:
            print('Parabéns, você venceu!')

def exibe_mensagem_boas_vindas (mensagem):
    print('=' * 32)
    print(mensagem)
    print('=' * 32)

def seleciona_palavra_secreta():
    lista_possiveis_nomes_forca = []

    with open("lista_possiveis_nomes_forca3.txt") as arquivo:
        for linha in arquivo:
            lista_possiveis_nomes_forca.append(linha.strip())

    numero_palavra_lista_forca = random.randrange(0, lista_possiveis_nomes_forca.__len__())

    palavra_secreta = lista_possiveis_nomes_forca[numero_palavra_lista_forca].upper()

    return palavra_secreta

if(__name__ == "__main__"):
    jogar()
2 respostas
solução!

Oi Leonardo, tudo bem com você?

Na função seleciona_palavra_secreta você retorna um valor que se refere a palavra secreta, porém, quando você chama seleciona_palavra_secreta dentro da função jogar(), você não guarda o valor desse retorno.

Devido a isso, o python não consegue saber qual foi a palavra secreta selecionada. E para corrigir isso, podemos atribuir a variável palavra_secreta o retorno da função seleciona_palavra_secreta. Veja:

def jogar():

    exibe_mensagem_boas_vindas("Bem-vindo ao jogo da forca!")
    palavra_secreta = seleciona_palavra_secreta()
     ... código omitido

Com isso, o código funcionará conforme o esperado.

Fico à disposição para qualquer dúvida. Abraços e bons estudos!

Obrigado