Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Meu jogo não roda

Não consigo achar o meu erro.

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 (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):
    ["_" for letra in palavra_secreta]



if(__name__== '__main__'):
        jogarForca()

Obrigada pela ajuda

1 resposta
solução!

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!

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