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

Problemas para criar funções

Oi, pessoal!

Então, eu criei uma versão própria para o código e não estou conseguindo separá-lo em funções, o Pycharm aponta o problema para as variáveis jogador1, jogador 2 e letras. Como eu posso resolver esse problema?

Código sem definir funções está funcionando plenamente:

def jogar():

    print("Olá, sejam bem vindos ao jogo da forca! É necessário 2 pessoas para jogar")
    print("O jogador 1 definirá a palavra e o jogador 2 tentará adivinhá-la")
    jogador1 = input("Jogador 1, qual é o seu nome? Digite o seu nome: ")

    print("Olá,", jogador1, "! Defina a palavra secreta e, logo em seguida, passe o notebook para o jogador 2")
    palavra_secreta = input("Digite a palavra: ").upper()
    print("Palavra definida com sucesso. Passe para o jogador 2")

    jogador2 = input("Olá, jogador 2! Qual é o seu nome? Digite o seu nome: ")
    print("Olá,", jogador2, "! Vamos jogar!")

    letras_acertadas = ["_" for _ in palavra_secreta]
    enforcou = False
    acertou = False
    erro = 0

    print(letras_acertadas)

    while not enforcou and not acertou:

        chute = input("Escolha uma letra: ")
        chute = chute.strip().upper()

        index = 0
        if chute in palavra_secreta:
            for letra in palavra_secreta:
                if chute == letra:
                    letras_acertadas[index] = letra
                index += 1
            print(letras_acertadas)
        else:
            erro += 1
            chance = 5 - erro
            if chance == 1:
                print("Não existe a letra {} na palavra secreta.".format(chute))
                print("Tente novamente, {}! Atenção!! Essa é sua última chance.".format(jogador2))
                print(letras_acertadas)
            elif chance == 0:
                print(jogador2, ",você perdeu :(.")
                print("A palavra escolhida por {} era: {}".format(jogador2, palavra_secreta))
                enforcou = True
            else:
                print("Não existe a letra {} na palavra secreta.".format(chute))
                print("Tente novamente, {}! Você tem apenas mais {} chances...".format(jogador2, chance))
                print(letras_acertadas)

        if "_" not in letras_acertadas:
            print("Parabéns {} !!! Você ganhou!!!".format(jogador2))
            acertou = True
    print("Fim do jogo")


if __name__ == "__main__":
    jogar()

No caso, a forma que não está funcionando e que eu gostaria que ficasse:

def mensagem_inicial():
    print("Olá, sejam bem vindos ao jogo da forca! É necessário 2 pessoas para jogar")
    print("O jogador 1 definirá a palavra e o jogador 2 tentará adivinhá-la")
    jogador1 = input("Jogador 1, qual é o seu nome? Digite o seu nome: ")

    print("Olá,", jogador1, "! Defina a palavra secreta e, logo em seguida, passe o notebook para o jogador 2")
    palavra_secreta = input("Digite a palavra: ").upper()
    print("Palavra definida com sucesso. Passe para o jogador 2")

    jogador2 = input("Olá, jogador 2! Qual é o seu nome? Digite o seu nome: ")
    print("Olá,", jogador2, "! Vamos jogar!")


def logica_forca():
    letras_acertadas = ["_" for _ in palavra_secreta]
    enforcou = False
    acertou = False
    erro = 0

    print(letras_acertadas)

    while not enforcou and not acertou:

        chute = input("Escolha uma letra: ")
        chute = chute.strip().upper()

        index = 0
        if chute in palavra_secreta:
            for letra in palavra_secreta:
                if chute == letra:
                    letras_acertadas[index] = letra
                index += 1
            print(letras_acertadas)
        else:
            erro += 1
            chance = 5 - erro
            if chance == 1:
                print("Não existe a letra {} na palavra secreta.".format(chute))
                print("Tente novamente, {}! Atenção!! Essa é sua última chance.".format(jogador2))
                print(letras_acertadas)
            elif chance == 0:
                print(jogador2, ",você perdeu :(.")
                print("A palavra escolhida por {} era: {}".format(jogador2, palavra_secreta))
                enforcou = True
            else:
                print("Não existe a letra {} na palavra secreta.".format(chute))
                print("Tente novamente, {}! Você tem apenas mais {} chances...".format(jogador2, chance))
                print(letras_acertadas)

        if "_" not in letras_acertadas:
            print("Parabéns {} !!! Você ganhou!!!".format(jogador2))
            acertou = True
    print("Fim do jogo")

def jogar():
    mensagem_inicial()
    logica_forca()

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

Olá,

vc precisa retornar as variáveis jogador1 e jogador2 da primeira função e depois passá-las para logica_forca que não existem localmente.

Ficaria algo como:

def mensagem_inicial():
    ...
    return jogador1, jogador2

def jogar():
    jogador1, jogador2 = mensagem_inicial()
    logica_forca(jogador1, jogador2)    

Existem outras formas de resolve (e até melhores), mas com isso já funciona.

[]'s

Opa, valeu ^^ Só tive que fazer algumas alterações, já que a variável "palavra_secreta" também deu um problema. Só pra título de registro, são elas:

def mensagem_inicial():
    ...
    return jogador1, jogador2, palavra_secreta

def logica_forca(jogador2, palavra_secreta):
        ...

def jogar():
    jogador1, jogador2, palavra_secreta = mensagem_inicial()
    logica_forca(palavra_secreta, jogador2)