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

TypeError: 'in <string>' requires string as left operand, not NoneType

Olá, pessoal, tudo bem ? Poderiam me ajudar com meu código, por favor?

Encontrei informações sobre este tipo de erro no google, porém não consigo identificar onde, no meu código, é possível consertá-lo.

import random

def jogar():

    imprime_mensagem_abertura()
    palavra_secreta = carrega_palavra_secreta()

    letras_acertadas = inicializa_letras_acertadas(palavra_secreta) # para cada letra em palavra secreta ele vai acrescentar "-" ex. se a palvra secreta for "maça" então ele vai criar 4 "_"
    print(letras_acertadas)

    enforcou = False
    acertou = False
    erros = 0

    while(not enforcou and not acertou):

        chute = pede_chute()

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

        enforcou = erros == 6
        acertou = "_" not in letras_acertadas # enquanto "_" estiver dentro das "letras_acertadas"
        print(letras_acertadas)

    if(acertou):
        imprime_mensagem_vencedor()
    else:
        imprime_mensagem_perdedor()
        print("Você perdeu!!")

def imprime_mensagem_vencedor():
    print("Você ganhou")

def imprime_mensagem_perdedor():
    print("Você perdeu")


def marca_chute_correto(chute,letras_acertadas,palavra_secreta):
    index = 0  # aí a gente cria uma variável index atribuindo zero, pois é o valor inicial do index de todas as listas
    for letra in palavra_secreta:  # para(for) letra que o usuario digitou em "palavra_secreta" :
        if (chute == letra):  # aqui fala se a letra que voce chutou for igual a letra
            letras_acertadas[
                index] = letra  # letras_acertadas é um array que armazena os chutes. Então se o chute for igual a letra eu vou colocar o objeto "letra dentro do meu array (letras_acertadas)
        index += 1

def pede_chute():
    chute = input("Qual a letra?")
    chute = chute.strip().upper()
    return

def inicializa_letras_acertadas(palavra):
    return  ["_" for letra in palavra]

def imprime_mensagem_abertura():
    print("*********************************")
    print("****bem vindo ao jogo da Forca****")
    print("*********************************")

def carrega_palavra_secreta():
    arquivo = open("palavras.txt","r")
    palavra = [] # lista que vai armazenar as palavars

    for linha in arquivo: #para cada linha(banana, maça, etc) no arquivo "palavra.txt , faça:
        linha = linha.strip()#para tirar os espaços
        palavra.append(linha)  # append = acrescente linha, ou seja, adicione palavras na variavel "palavra"

    arquivo.close()

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

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

Olá Alisson, tudo bem? Espero que sim!

def pede_chute():
    chute = input("Qual a letra?")
    chute = chute.strip().upper()
    return

A sua função pede_chute() está retornando None e deveria retornar a string chute, nesse caso basta adicionar o retorno adequado na sua função:

def pede_chute():
    chute = input("Qual a letra?")
    chute = chute.strip().upper()
    return chute

Estou à disposição. Bons estudos!

Olá João, tudo ótimo e com você ? Muito obrigado pela ajuda. Testei como você sugeriu e deu tudo certo! Obrigado. Abraço!