Oiiii Iza, tudo bem contigo?
Executei seu código por aqui e obtive o seguinte erro:
TypeError: Palavra_secreta() missing 1 required positional argument: 'palavra_secreta'
Isso está acontecendo porque na função Palavra_secreta
você está recebendo um parâmetro, porém, na chamada dessa função você não está passando parâmetro algum.
A função:
def Palavra_secreta (palavra_secreta): # parâmetro 'palavra_secreta'
livros = ["PromessaDaRosa", "PeçasInfernais", "Obisidiana", "OrgulhoEPreconceito", "SixOfCrows"]
numero = random.randrange(0, len(livros))
palavra_secreta = livros[numero].upper()
return palavra_secreta()
A chamada:
def jogarForca():
Oi()
palavra_secreta = Palavra_secreta()
Observe nos trechos acima que na chamada da função Palavra_secreta
não é passado nenhum argumento, por isso do erro.
Para corrigir isso, podemos apenas retirar o parâmetro dessa função, pois, a lista de palavras (variável livros
) já está dentro dessa função. Veja:
def Palavra_secreta ():
livros = ["PromessaDaRosa", "PeçasInfernais", "Obisidiana", "OrgulhoEPreconceito", "SixOfCrows"]
numero = random.randrange(0, len(livros))
palavra_secreta = livros[numero].upper()
return palavra_secreta()
Porém, após essa correção iremos obter outro erro:
TypeError: 'str' object is not callable
E dessa vez, isso ocorre porque no return dessa mesma função Palavra_secreta
temos que retornar a variável palavra_secreta
e não uma função (os parênteses demonstram que é uma função)
Então, a correção dessa função ficará da seguinte forma:
def Palavra_secreta ():
livros = ["PromessaDaRosa", "PeçasInfernais", "Obisidiana", "OrgulhoEPreconceito", "SixOfCrows"]
numero = random.randrange(0, len(livros))
palavra_secreta = livros[numero].upper()
return palavra_secreta
O código irá funcionar? Ainda não, temos mais algumas modificações a fazer. Acompanhe comigo.
O próximo erro que aparecerá é:
TypeError: object of type 'NoneType' has no len()
E ele está ocorrendo porque na função Inicia_letras_Acertadas
precisamos colocar a instrução return. Observe no código abaixo que está sem o return:
def Inicia_letras_Acertadas(palavra_secreta):
["_" for letra in palavra_secreta]
A forma correta, com o return:
def Inicia_letras_Acertadas(palavra_secreta):
return ["_" for letra in palavra_secreta]
Agora sim Iza, após essas correções o seu código voltará funcionar.
Segue abaixo o código completo com as correções citadas:
import random
def jogarForca():
Oi()
palavra_secreta = Palavra_secreta()
letra_acertada = Inicia_letras_Acertadas(palavra_secreta)
enforcou = False
acertou = False
erros = 0
print("sua palavra tem {} letras, boa sorte".format(len(letra_acertada)))
print(letra_acertada)
while (not enforcou and not acertou):
chute = input("Digite uma letra")
chute = chute.strip().upper()
if (chute in palavra_secreta):
index = 0
for letra in palavra_secreta:
if (chute == letra):
letra_acertada[index] = letra
index = index + 1
else:
print("não tem essa letra na sua palavra")
erros = erros + 1
enforcou = erros == 6
acertou = "_" not in letra_acertada
print(letra_acertada)
if (acertou):
print("Parabéns, você acertou a palavra")
else:
print("que pena, você errou")
def Oi():
print("----------------------------")
print("Bem vinde ao jogo de Forca")
print("----------------------------")
def Palavra_secreta ():
livros = ["PromessaDaRosa", "PeçasInfernais", "Obisidiana", "OrgulhoEPreconceito", "SixOfCrows"]
numero = random.randrange(0, len(livros))
palavra_secreta = livros[numero].upper()
return palavra_secreta
def Inicia_letras_Acertadas(palavra_secreta):
return ["_" for letra in palavra_secreta]
if(__name__== '__main__'):
jogarForca()
Qualquer dúvida estou por aqui, tá bom?
Grande abraço!