Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

A função marca_chute_correto está funcionando sem parâmetros

Gostaria de entender por que a função marca_chute_correto está funcionando sem os parâmetros utilizados na aula. Já rodei o meu código e tudo está funcionando normalmente mas ainda não entendi o motivo.

def jogar():
    import random

    def imprime_mensagem_inicial():
        print("*********************************")
        print("***Bem vindo ao jogo de Forca!***")
        print("*********************************")

    def escolher_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_letras_acertadas(palavra):
        letras_acertadas = ["_" for letra in palavra]
        return letras_acertadas

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

    def marca_chute_correto():
        index = 0  # index = posição #
        for letra in palavra_secreta:
            if (letra == chute):
                letras_acertadas[index] = letra
            index += 1

    imprime_mensagem_inicial()
    palavra_secreta = escolher_palavra_secreta()
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

    enforcou = False
    acertou = False
    tentativas = len(palavra_secreta)

    print(letras_acertadas)

    while(not enforcou and not acertou):
        print("Você possui {} tentativas".format(tentativas))
        chute = pede_chute_player()

        if (chute in palavra_secreta):
            marca_chute_correto()

            print(letras_acertadas)
            print("Jogando...")

        else:
            tentativas = tentativas - 1

        enforcou = tentativas == 0
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

    if (acertou):
        print("Você ganhou!")

    elif (enforcou):
        print("Você perdeu!")

    print("Fim de jogo.")

if(__name__ == "__main__"):
    jogar()
1 resposta
solução!

Olá Felipe, tudo bem com você?

A função marca_chute_correto está funcionando sem que seja necessário informar os parâmetros da função, devido ao fato dessa função está dentro da função jogar, com isso as variáveis declaradas dentro da função jogar ficam disponíveis para uso pela função marca_chute_correto, sem a necessidade de passarmos os parâmetros.

Na aula, é realizado o refatoramento do código de forma que as funções fiquem fora da função jogar, assim será necessário passarmos os parâmetros para a função marca_chute_correto.

Refatorando o código seu de forma que as funções fiquem fora da função jogar teremos que passar os parâmetros para a função marca_chute_correto, abaixo a refatoração, retirei as funções que estavam dentro da função jogar e adicionei elas acima e fora da função jogar

import random


def imprime_mensagem_inicial():
    print("*********************************")
    print("***Bem vindo ao jogo de Forca!***")
    print("*********************************")


def escolher_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_letras_acertadas(palavra):
    letras_acertadas = ["_" for letra in palavra]
    return letras_acertadas


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


def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
    index = 0  # index = posição #
    for letra in palavra_secreta:
        if (letra == chute):
            letras_acertadas[index] = letra
        index += 1


def jogar():
    imprime_mensagem_inicial()
    palavra_secreta = escolher_palavra_secreta()
    letras_acertadas = inicializa_letras_acertadas(palavra_secreta)

    enforcou = False
    acertou = False
    tentativas = len(palavra_secreta)

    print(letras_acertadas)

    while (not enforcou and not acertou):
        print("Você possui {} tentativas".format(tentativas))
        chute = pede_chute_player()

        if (chute in palavra_secreta):
            marca_chute_correto(chute, letras_acertadas, palavra_secreta)

            print(letras_acertadas)
            print("Jogando...")

        else:
            tentativas = tentativas - 1

        enforcou = tentativas == 0
        acertou = "_" not in letras_acertadas
        print(letras_acertadas)

    if (acertou):
        print("Você ganhou!")

    elif (enforcou):
        print("Você perdeu!")

    print("Fim de jogo.")


if (__name__ == "__main__"):
    jogar()

Lembre-se que pode contar sempre com o fórum Alura, seja para tirar suas dúvidas ou para compartilhar seu desenvolvimento.

Fico à disposição.

Abraços e bons estudos.

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