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

Programa só roda com a função no início

Desde já agradeço a atenção.

Meu código só está rodando com as funções funcao_abertura() e palavra_secreta = funcao_palavra_secreta() sendo declaradas após o import random, conforme abaixo.

import random

def funcao_abertura(): print("*") print("***Escolha o seu jogo!***") print("*")

def funcao_palavra_secreta():

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

for linha in arquivo:
    linha = linha.strip()
    palavra.append(linha)

arquivo.close()

numero = random.randrange(0, len(palavra))
palavra_secreta = palavra[numero].upper()
return palavra_secreta

def jogar():

funcao_abertura()
palavra_secreta = funcao_palavra_secreta()

#Se a palavra secreta fosse digitada por aqui palavra_secreta = input("Qual vai ser a palavra secreta? ").upper()
letras_acertadas = ["_" for letra in palavra_secreta] #essa funcionalidade se chama List Comprehensions
#Esse for seria usado caso a palavra secreta fosse digitada aqui
#for letra in palavra_secreta:
#     letras_acertadas.append("_")
tentativas = len(palavra_secreta)

erros = 0

enforcou = False
acertou = False

print(letras_acertadas)

while(not enforcou and not acertou): #enquanto não enforcou e não acertou. not enforcou = True / not acertou = True

    chute = input("Qual letra: ")
    chute = chute.strip().upper()
    if(chute in palavra_secreta):
        index = 0
        for letra in palavra_secreta:
            if (chute == letra):
                letras_acertadas[index] = letra
            index += 1 #igual a index = index + 1
    else:
        erros += 1 #igual a erros = erros + 1
        print("Ops, você errou! Faltam {} tentativas.".format(tentativas - erros))

    enforcou = erros == tentativas
    acertou = "_" not in letras_acertadas
    print(letras_acertadas)
if(acertou):
    print("Você ganhou")
else:
    print("Voce perdeu")
print("Fim do jogo!")

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

Seu declarar as funções após o final (código abaixo do erro), o segunite erro é exibido: Traceback (most recent call last): File "C:\cursopython\aula1\forca.py", line 46, in jogar() File "C:\cursopython\aula1\forca.py", line 5, in jogar funcao_abertura() NameError: name 'funcao_abertura' is not defined

import random

def jogar():

funcao_abertura()
palavra_secreta = funcao_palavra_secreta()

#Se a palavra secreta fosse digitada por aqui palavra_secreta = input("Qual vai ser a palavra secreta? ").upper()
letras_acertadas = ["_" for letra in palavra_secreta] #essa funcionalidade se chama List Comprehensions
#Esse for seria usado caso a palavra secreta fosse digitada aqui
#for letra in palavra_secreta:
#     letras_acertadas.append("_")
tentativas = len(palavra_secreta)

erros = 0

enforcou = False
acertou = False

print(letras_acertadas)

while(not enforcou and not acertou): #enquanto não enforcou e não acertou. not enforcou = True / not acertou = True

    chute = input("Qual letra: ")
    chute = chute.strip().upper()
    if(chute in palavra_secreta):
        index = 0
        for letra in palavra_secreta:
            if (chute == letra):
                letras_acertadas[index] = letra
            index += 1 #igual a index = index + 1
    else:
        erros += 1 #igual a erros = erros + 1
        print("Ops, você errou! Faltam {} tentativas.".format(tentativas - erros))

    enforcou = erros == tentativas
    acertou = "_" not in letras_acertadas
    print(letras_acertadas)
if(acertou):
    print("Você ganhou")
else:
    print("Voce perdeu")
print("Fim do jogo!")

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

def funcao_abertura(): print("*") print("***Escolha o seu jogo!***") print("*")

def funcao_palavra_secreta():

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

for linha in arquivo:
    linha = linha.strip()
    palavra.append(linha)

arquivo.close()

numero = random.randrange(0, len(palavra))
palavra_secreta = palavra[numero].upper()
return palavra_secreta
2 respostas
solução!

Boa noite Alan,

Acho que o problema acontece se você colocar a definição da função jogar() depois da função que inicia o jogo. Nesse caso, ele tenta iniciar o jogo, mas sem ter a função jogar() definida, por isso ele dá o erro de "jogar() não foi definida". Mantenha essa função que inicia o jogo no final do arquivo, depois de todas as outras funções, pois ela que irá iniciar o jogo e precisa que tudo esteja definido antes:

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

Era essa sua dúvida? Espero ter ajudado.

Mais uma vez agradeço ao retorno Abner. Essa isso mesmo.

At.te.