Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

3 erros mesmo com o arquivo

Já conclui o curso, criei o arquivo palavras.txt, está na mesma pasta que o arquivo forca.py e já tentei executar o jogo da forca (tanto pelo arquivo que criei como pelo do professor) e aparecem, EM AMBOS, os seguintes códigos de erro:

Traceback (most recent call last):

File "C:/Users/Avell/PycharmProjects/Jogos/forca.py", line 160, in jogar()

File "C:/Users/Avell/PycharmProjects/Jogos/forca.py", line 6, in jogar palavra_secreta = carrega_palavra_secreta()

File "C:/Users/Avell/PycharmProjects/Jogos/forca.py", line 57, in carrega_palavra_secreta palavra_secreta = palavras[numero].upper() AttributeError: 'builtin_function_or_method' object has no attribute 'upper'

Linhas respectivas dos erros:

line 6: palavra_secreta = carrega_palavra_secreta()

line 57: palavra_secreta = palavras[numero].upper()

line 159 - 160 (a mais estranhas de todas pra mim): if (name == "main"): jogar()

O que pode ser?

3 respostas

Olá Marcelo,

seria melhor que demonstrasse o código completo. Mas pelo erro, aparentemente :

palavras[numero].upper() 

não é uma str. Pois não foi encontrado o método upper.

import random

def jogar():

imprime_mensagem_abertura()
palavra_secreta = carrega_palavra_secreta()

letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

enforcou = False
acertou = False
erros = 0
#quando o jogo começa, o jogador não acertou a palavra e nem se enforcou

print(letras_acertadas)

while (not acertou and not enforcou):

    chute = pede_chute()

    if (chute in palavra_secreta):
        chute_correto(palavra_secreta, chute, letras_acertadas)
    else:
        erros += 1
        desenha_forca(erros)
    print("Faltam {} tentativas".format(7 - erros))

    enforcou = erros == 7
    acertou = "_" not in letras_acertadas

    print(letras_acertadas)
if(acertou):
    imprime_mensagem_vencedor()
else:
    imprime_mensagem_perdedor(palavra_secreta)

print("Fim de jogo!")

#* FIM DA MAIN **

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

def carrega_palavra_secreta(): arquivo = open("palavras.txt", "r") palavras = []

for linha in arquivo:
    linha = linha.strip  # remove o \n ao final de cada linha
    palavras.append(linha)

arquivo.close()

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

def inicializa_letras_acertadas(palavra_secreta): return [""for letra in palavrasecreta]

def pede_chute(): print("Jogando...") chute = input("Qual letra?") chute = chute.strip() return chute

def chute_correto(palavra_secreta, chute, letras_acertadas): index = 0 for letra in palavra_secreta: # percorre a palavra if (chute.upper == letra.upper): # verifica se a letra digitada está presente na palavra letras_acertadas[index] = letra index += 1

def imprime_mensagem_vencedor(): print("Parabéns, você ganhou!") print(" ___ ") print(" '.=====_.' ") print(" .-\: /-. ") print(" | (|:. |) | ") print(" '-|:. |-' ") print(" \::. / ") print(" '::. .' ") print(" ) ( ") print(" _.' '. ") print(" '-------' ") def imprime_mensagem_perdedor(palavra_secreta): print("Puxa, você foi enforcado!") print("A palavra era {}".format(palavra_secreta)) print(" ___ ") print(" / \ ") print(" / \ ") print("// /\ ") print("| XXXX XXXX | / ") print(" | XXXX XXXX |/ ") print(" | XXX XXX | ") print(" | | ") print(" __ XXX / ") print(" |\ XXX /| ") print(" | | | | ") print(" | I I I I I I I | ") print(" | I I I I I I | ") print(" _ / ") print(" \ / ") print(" ____/ ")

def desenha_forca(erros): print(" ___ ") print(" |/ | ")

if(erros == 1):
    print(" |      (_)   ")
    print(" |            ")
    print(" |            ")
    print(" |            ")

if(erros == 2):
    print(" |      (_)   ")
    print(" |      \     ")
    print(" |            ")
    print(" |            ")

if(erros == 3):
    print(" |      (_)   ")
    print(" |      \|    ")
    print(" |            ")
    print(" |            ")

if(erros == 4):
    print(" |      (_)   ")
    print(" |      \|/   ")
    print(" |            ")
    print(" |            ")

if(erros == 5):
    print(" |      (_)   ")
    print(" |      \|/   ")
    print(" |       |    ")
    print(" |            ")

if(erros == 6):
    print(" |      (_)   ")
    print(" |      \|/   ")
    print(" |       |    ")
    print(" |      /     ")

if (erros == 7):
    print(" |      (_)   ")
    print(" |      \|/   ")
    print(" |       |    ")
    print(" |      / \   ")

print(" |            ")
print("_|___         ")
print()

if (name == "main"): jogar()

alguns pontos a corrigir, um deles:

 if (chute in palavra_secreta):

no método jogar, deveria ser chute.upper().