Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Erro após inserir uma letra

Olá. Meu jogo inicializa normalmente, porém após a adição de qualquer letra, o jogo termina com as mensagens de erro:

File "meu diretório", line 156, in jogar() File "meu diretório", line 19, in jogar if(chute in palavra_secreta): TypeError: 'in ' requires string as left operand, not NoneType

Segue o código:

import random

def jogar():

    imprime_mensagem_de_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = ["_" for _ in palavra_secreta]
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while(not enforcou and not acertou):

        chute = palpite()

        if(chute in palavra_secreta):
            chutes_corretos(chute, letras_acertadas, palavra_secreta)
        else:
            erros = erros + 1
            desenha_forca(erros)

        if chute in letras_acertadas:
            letras_faltando = letras_acertadas.count("_")
            print("Ainda falta acertar {} letras".format(letras_faltando))

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

        print(letras_acertadas)

    if (acertou):
        mensagem_vitoria()

    else:
        mensagem_derrota(palavra_secreta)

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()

def imprime_mensagem_de_abertura():
    print("**********************************")
    print("Bem vindo ao jodo de FORCA")
    print("**********************************")

def carrega_palavra_secreta():
    arquivo = open("lista_de_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()

    return palavra_secreta

def palpite():
    chute = input("Qual letra?")
    chute = chute.strip().upper()



def chutes_corretos(chute, letras_acertadas, palavra_secreta):
    index = 0
    for letra in palavra_secreta:
        if (chute == letra):
            letras_acertadas[index] = letra
        index = index + 1

def mensagem_vitoria():
    print("Parabéns, você ganhou!")
    print("       ___________      ")
    print("      '._==_==_=_.'     ")
    print("      .-\\:      /-.    ")
    print("     | (|:.     |) |    ")
    print("      '-|:.     |-'     ")
    print("        \\::.    /      ")
    print("         '::. .'        ")
    print("           ) (          ")
    print("         _.' '._        ")
    print("        '-------'       ")

def mensagem_derrota(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("       \_______/           ")

if(__name__ == "__main__"):
    jogar()
2 respostas
solução!

Fala Amigo!!! Descobri o pq do bug. Vc não está retornando o "chute". Vc deixa ele Upper, ams não retorna nada na função palpite.

Acrescente "return chute" na função palpite e dará certo! (na linha 114)

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Espero ter ajudado. Abraços!

Resolvido. Muito obrigado!