1
resposta

Eu aperfeiçoei o jogo da forca e está dando erro

Eu aperfeiçoei o jogo da forca colocando algumas opções a mais só que ao fazer isso apareceu 2 problemas todos relacionados ao jogo em si: 1 - Fica aparecendo None no console, 2 - Quando acerto a frase a frase da erro nas linhas 381, 216

Alguém poderia me ajudar?

import random


def jogo_forca():
    # função com mensagem de abertura
    abertura()
    opcao = int(input(print("(1) Jogar (2) Palavras Existentes (3) Adicionar Palavras")))

    if (opcao == 1):

        palavra_secreta = carrega_palavra_secreta()

        # mostrando a palavra na forma de de "_ _ _ _ _"
        letras_acertadas = inicializa_letras_acertadas(palavra_secreta)
        print(letras_acertadas)

        enforcou = False
        acertou = False
        erros = 0

        # enquanto não for (True)
        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
                desenha_forca(erros)

            enforcou = erros == 7
            # quando não tiver "_" dentro de letras_acertadas ele acertou
            acertou = "_" not in letras_acertadas
            print(letras_acertadas)

        if (acertou):
            ganhou(palavra_secreta)
        else:
            perdeu(palavra_secreta)

    elif (opcao == 2):
        palavras_existentes()
    elif (opcao == 3):
        adicionando_palavras()
    else:
        print("Opção inválida")


def adicionando_palavras():
    print("Cadastre a palavra nova")
    # salva a palavra em letras minúscula
    palavra = input("Palavra: ").lower()

    # insere dados sem substituir os já existentes
    arquivo = open("palavras.txt", "a", encoding="utf8")
    # quebra de linha para o próximo dado
    arquivo.write("\n")
    # escreve no arquivo
    arquivo.write(palavra)

    arquivo.close()



def palavras_existentes():
    arquivo = open("palavras.txt", "r", encoding="utf8")
    palavras = []

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

    for linha in palavras:
        print(linha)


def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
    # index vai receber as letras acertadas
    index = 0
    for letra in palavra_secreta:
        if (chute == letra):
            # cada letra irá assume uma posição no index
            letras_acertadas[index] = letra
        index += 1


def pede_chute():
    chute = input("Qual letra? ")
    # tira os espaços do chute e deixando tudo maiúsculo
    chute = chute.strip().upper()
    return chute
1 resposta

Olá Marcos, tudo bem com você?

Peço desculpas pela demora em lhe responder.

Meus parabéns pela implementação do código. Adicionar a possibilidade do usuário verificar quais as palavras secretas possíveis e poder adicionar novas é uma excelente implementação do código.

O código postado está incompleto, assim, para que fosse possível realizar testes e simulações, utilizei o código apresentado na aula para as funções faltantes.

A impressão da palavra None no início da execução do código, está ocorrendo devido ao uso da função print dentro da função input, desta forma: input(print()). Ao utilizarmos a função input basta fornecermos a mensagem que será impressa para o usuário, não sendo necessário o uso da função print.

Para corrigir, na função jogo_forca localize a declaração da variável opcao e declare-a como apresentado abaixo, removendo o uso da função print().

opcao = int(input("(1) Jogar (2) Palavras Existentes (3) Adicionar Palavras"))

Quando ao erro apresentado, quando o usuário acerta a palavra secreta. Conforme simulações realizadas, está sendo levantado erro devido à passagem de um parâmetro para a função ganhou, mas, essa função originalmente não recebe parâmetros.

Peço que verifique se a função ganhou espera receber algum parâmetro, caso não receba, remova o parâmetro no momento da chamada da função. Na função jogo_forca dentro do laço de repetição while localize a estrutura condicional if (acertou): e declare-a como apresentado abaixo.

if (acertou):
    ganhou()
else:
    perdeu(palavra_secreta)

Após as mudanças citadas, salve o arquivo e realize uma nova execução do código e verifique se obteve êxito.

Reforço que os testes foram realizados utilizando partes do código da aula, por isso, existe a possibilidade de ser necessário realizar correções nas funções faltantes. As funções que estão faltando são abertura, carrega_palavra_secreta, inicializa_letras_acertadas, desenha_forca, ganhou e perdeu.

Caso após as mudanças, continue apresentando erros, peço que envie o código completo com as funções faltantes.

Não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!