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

Erro na função - 'bool' object is not callable

Erro na função. Quando tento chamar a função acertou (que seria correspondente a função marca_ponto_correto() da aula) aparece o erro "'bool' object is not callable"

import random

def jogar():
    abertura()
    palavra_secreta = sorteio()

    letras_acertadas = []
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

    enforcou = False
    acertou = False
    tentativas = 10

    while(not enforcou and not acertou): #pode ser (enforcou==False and acertou==False)
        index = 0
        print(letras_acertadas)
        chute = input("\nQual seu chute? ")

        if(chute.lower().strip() in palavra_secreta):
            acertou(chute,letras_acertadas,palavra_secreta,index)

        else:
            tentativas -= 1
            print("Errou ;-; - Tentativas restantes: {}".format(tentativas))
            enforcou = tentativas==0
        acertou = "_" not in letras_acertadas

    print(letras_acertadas) 
    print("\nFIM DO JOGO")

def abertura():
    print("**********************************")
    print("Bem vindo ao jogo de Forca!")
    print("**********************************")

def sorteio():
    arquivo = open("palavras.txt","r")
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()
    numero = random.randrange(0, len(palavras))
    palavra = palavras[numero]
    print(palavra)
    return palavra

def inicializa_letras_acertadas(palavra_secreta):
    letras_acertadas = []
    for aux in palavra_secreta: #poderia usar o letras_acertadas["_" for aux in palavra_secreta]
        letras_acertadas.append("_")
    print(letras_acertadas)
    return letras_acertadas


def acertou(chute,letras_acertadas,palavra_secreta,index):
    for letra in palavra_secreta: #pega cada letra da palavra_secreta
        if(chute.lower().strip() == letra):
            letras_acertadas[index] = letra
            print("A letra {} está na posição {} da palavra.".format(letra,index))
        index += 1

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

1 resposta
solução!

Olá Diego, tudo bem com você?

O erro que está sendo apresentado está acontecendo devido ao conflito de nomenclatura entre a variável acertou e a função acertou, essa duplicidade no nome pode gerar esse conflito no momento em que o código é executado, da forma que está a variável acertou está sendo chamada no lugar da função acertou.

Para corrigir esse erro, basta modificar um dos nomes, recomendo que modifique o nome da função acertou, mudando para algo como: marca_ponto_correto. Lembrando que, após realizar a mudança do nome da função, será necessário modificar também no momento em que ela é chamada dentro da função jogar().

Deixo abaixo os locais que devemos modificar, e os números para as linhas, como referência inicial.

Chamada da função marca_ponto_correto - linha 20

marca_ponto_correto(chute,letras_acertadas,palavra_secreta,index)

Função marca_ponto_correto - linha 56

def marca_ponto_correto(chute,letras_acertadas,palavra_secreta,index):

Após realizar a troca do nome acertou para marca_ponto_correto basta executar o código.

Lembre-se que pode contar sempre com o fórum Alura, seja para tirar suas dúvidas ou para compartilhar o seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!