1
resposta

Erro na execução

Olá, tudo bem? O meu código deu um erro estranho e não estou conseguindo resolver. Ao dar run, ele aponta os seguintes erros:

Traceback (most recent call last):
  File "C:\Users\PEDRO.HECK\PycharmProjects\jogos\forca.py", line 69, in <module>
    jogar()
  File "C:\Users\PEDRO.HECK\PycharmProjects\jogos\forca.py", line 25, in jogar
    for i in palavra_secreta:
TypeError: 'builtin_function_or_method' object is not iterable

O meu código completo segue abaixo:

import random


def jogar():
    print(35 * "-")
    print("Bem-vindo(a) ao Jogo de Forca!")
    print(35 * "-")

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

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

    arquivo.close()

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

    # letras_acertadas = ["-" for letra in palavra_secreta]
    letras_acertadas = []

    for i in palavra_secreta:
        if i == " ":
            letras_acertadas.append(" ")
        elif i == "-":
            letras_acertadas.append("-")
        else:
            letras_acertadas.append("_")

    enforcou = False
    acertou = False
    erros = 0

    for i in letras_acertadas:
        print(i, " ", end='')

    # o jogo se mantém enquanto não enforcou nem acertou
    while not enforcou and not acertou:

        chute = input("\n\nChute uma letra: ")
        chute = chute.strip().upper()  # .strip() é pra tirar quaisquer espaços que podem estar no imput (ex.: " b")

        if chute in palavra_secreta:
            index = 0
            for letra in palavra_secreta:
                if chute.upper() == letra.upper():
                    letras_acertadas[index] = letra
                index += 1
        else:
            erros += 1
            print("Errou! Você tem {} tentativas\n".format(6 - erros))

        enforcou = erros == 6  # enforcou se torna True caso erros se iguale a 6
        acertou = "_" not in letras_acertadas
        # imprimindo as letras acertadas
        for i in letras_acertadas:
            print(i, " ", end='')

    if acertou:
        print("\nParabéns, você ganhou!")
    else:
        print("\nVocê foi enforcado!")


if __name__ == "__main__":
    jogar()

Reparem que na linha 24 o meu código está diferente do do professor pois quis que mostrasse outros caracteres no console além de "_" caso a palavra contenha hífen ou seja composta por mais de uma palavra (portanto contendo espaço). Este pedaço do código estava funcionando antes desta aula que ensina a usar o arquivo "palavras.txt", então não creio que este seja o problema.

Alguém saberia me ajudar neste problema?

Desde já agradeço

1 resposta

Olá Pedro, tudo bem?

O erro está na linha abaixo:

palavra_secreta = palavras[numero].upper

Você esqueceu dos parênteses no método upper().

Abraços e bons estudos!