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

estou com problemas de execução, o jogo abre mas quando digito uma letra ele da erro.

Ola a todos, estou com uma dificuldade no jogo forca, ate entao aparentemente esta tudo igual, mas quando eu executo ele e digito uma letra ele da error......segue o codigo:

import random

def jogar(): imprima_mensagem_abertura() palavra_secreta = carrega_palavra_secreta()

letras_acertadas = inicializa_letra_acertadas(palavra_secreta)
print(letras_acertadas)

enforcou = False
acertou = False
erros = 0

while (not enforcou and not acertou):

    chute = pede_chute()

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

    enforcou = erros == 6
    acertou = "_" not in letras_acertadas
    print(letras_acertadas)

if (acertou):
    mensagem_vencedor()
else:
    mensagem_perdedor(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 mensagem_vencedor(): print("Parabéns, você ganhou!") print(" ___ ") print(" '.=====_.' ") print(' .-\: /-. ') print(" | (|:. |) | ") print(" '-|:. |-' ") print(' \::. / ') print(" '::. .' ") print(" ) ( ") print(" _.' '. ") print(" '-------' ")

def 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 chute_correto(chute, letras_acertadas, palavra_secreta): index = 0 for letra in palavra_secreta: if (chute == letra): letras_acertadas[index] = letra index += 1

def imprima_mensagem_abertura(): print("*") print("Bem vindo ao jogo da Forca!") print("*")

def carrega_palavra_secreta(): 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_secreta = palavras[numero].upper()
return palavra_secreta

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

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

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

Traceback (most recent call last): File "C:\Users\user\PycharmProjects\Jogos\Forca.py", line 161, in jogar() File "C:\Users\user\PycharmProjects\Jogos\Forca.py", line 19, in jogar if (chute in palavra_secreta): TypeError: 'in ' requires string as left operand, not NoneType

fico no aguardo de uma luz.

Grato pela atenção!
2 respostas
solução!

Oi Vagner,

o erro que está aparecendo pra vc, é que no if (chute in palavra_secreta) a variável chute está vindo como None, então ela não está sendo preenchida com a letra que vc digita.

A função que vc digitou ali pode ser o problema:

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

Esse return vazio na última linha faz a função retornar None ao invés da letra. Tente mudar para:

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

Muito obrigado, consegui solucionar esse problema!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software