palavra_secreta = carrega_palavra_secreta()
letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
Como fazer para saber quando ou nao chamar a funcao dessa forma sem quebrar o codigo? como sei que a variavel está fora?
palavra_secreta = carrega_palavra_secreta()
letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
Como fazer para saber quando ou nao chamar a funcao dessa forma sem quebrar o codigo? como sei que a variavel está fora?
from random import randint
def jogar_forca():
imprime_mensagem_abertura()
palavra_secreta = carrega_palavra_secreta()
letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
enforcou = False
acertou = False
erros = 0
# Enquanto True e True
while not enforcou and not acertou:
chute = pede_chute()
if chute in palavra_secreta:
marca_chute_correto(chute, letras_acertadas,palavra_secreta)
else:
erros = erros + 1
enforcou = erros == 6
acertou = "_" not in letras_acertadas
print(letras_acertadas)
if acertou:
imprime_mensagem_vencedor()
else:
imprime_mensagem_perdedor()
# Funções
def imprime_mensagem_abertura():
print("*************************************")
print("*** Bem vindo ao meu jogo Forca! ****")
print("*************************************")
def carrega_palavra_secreta():
x = open("forca.txt", "r")
lista = (x.readlines())
escolhe_r = randint(1, len(lista))
x.close()
palavra_secreta = lista[escolhe_r].upper().strip()
return palavra_secreta
def inicializa_letras_acertadas(palavra):
lista = ["_" for letra in palavra]
return lista
def pede_chute():
input("Qual letra?")
chute = pede_chute()
chute = chute.strip().upper()
return chute
def marca_chute_correto(chute, letras_acertadas,palavra_secreta):
index = 0
for letra in palavra_secreta:
if chute.upper() == letra.upper():
letras_acertadas[index] = letra
index = index + 1
def imprime_mensagem_vencedor():
print("Você ganhou!")
def imprime_mensagem_perdedor():
print("Você perdeu!")
if __name__ == "__main__":
jogar_forca()
`
Qual o erro? Meu codigo aparentemente nao esta funcionando a parte do chute, ele so pede qual a letra infinitamente, alguem poderia me ajudar onde errei ?
Acho que o problema está que no seu código a função pede_chute() está chamando outra função pede_chute() dentro dela mesmo, gerando um loop infinito de "pedir chute". Tente alterar ela para isso aqui, removendo o "chute = pede_chute()" depois do input:
def pede_chute():
input("Qual letra?")
chute = chute.strip().upper()
return chute
Não testei aqui, mas acho que é isso. Espero ter ajudado.
Oi agora quebrou acho que na funcao da palavra secreta pelo erro que deu.. olha:
from random import randint
def jogar_forca():
imprime_mensagem_abertura()
palavra_secreta = carrega_palavra_secreta()
letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
enforcou = False
acertou = False
erros = 0
# Enquanto True e True
while not enforcou and not acertou:
chute = pede_chute()
if chute in palavra_secreta:
marca_chute_correto(chute, letras_acertadas,palavra_secreta)
else:
erros = erros + 1
enforcou = erros == 6
acertou = "_" not in letras_acertadas
print(letras_acertadas)
if acertou:
imprime_mensagem_vencedor()
else:
imprime_mensagem_perdedor()
# Funções
def imprime_mensagem_abertura():
print("*************************************")
print("*** Bem vindo ao meu jogo Forca! ****")
print("*************************************")
def carrega_palavra_secreta():
x = open("forca.txt", "r")
lista = (x.readlines())
escolhe_r = randint(1, len(lista))
x.close()
palavra_secreta = lista[escolhe_r].upper().strip()
return palavra_secreta
def inicializa_letras_acertadas(palavra):
lista = ["_" for letra in palavra]
return lista
def pede_chute():
input("Qual letra?")
chute = chute.strip().upper()
return chute
def marca_chute_correto(chute, letras_acertadas,palavra_secreta):
index = 0
for letra in palavra_secreta:
if chute.upper() == letra.upper():
letras_acertadas[index] = letra
index = index + 1
def imprime_mensagem_vencedor():
print("Você ganhou!")
def imprime_mensagem_perdedor():
print("Você perdeu!")
if __name__ == "__main__":
jogar_forca()
Aguardo seu retorno, obrigado.
segue erro quando eu digito qualquer letra:
Traceback (most recent call last):
File "/Users/gfmolon/estudos/Python3_Introducao_Parte1/jogos/forca.py", line 72, in <module>
jogar_forca()
File "/Users/gfmolon/estudos/Python3_Introducao_Parte1/jogos/forca.py", line 15, in jogar_forca
chute = pede_chute()
File "/Users/gfmolon/estudos/Python3_Introducao_Parte1/jogos/forca.py", line 55, in pede_chute
chute = chute.strip().upper()
UnboundLocalError: local variable 'chute' referenced before assignment
Olá Guilherme,
Depois do que o Abner falou, falta só você salvar o valor de input("Qual letra?")
em chute
:
def pede_chute():
chute = input("Qual letra?") # Essa parte aqui
chute = chute.strip().upper()
return chute
O erro atual acontece porque você chama chute.strip().upper()
mas chute
ainda não tinha sido criado.
Espero ter ajudado, qualquer coisa é só falar!
Deu certo!!! Obrigado, ainda to cru nessa parte de funções es, mas aos poucos vamos pegando, obrigado!