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

função marca_chute_correto

Olá, na função marca_chute_correto é passado a variavel letras_acertadas e é feito a atualização da mesma, porém em nenhum momento a função retorna essa atualização para a função principal, mesmo assim o python mantém o contexto, isso acontece por estar usando o mesmo nome da variavel em funções diferentes? como o python entende isso?

agradeço desde já!

3 respostas
solução!

Isso, ocorre porque ao colocar a variável letras_acertadas no parâmetro da nova função, o código referencia esse parâmetro com o endereço da variável original por estar usando o mesmo nome. Assim, dentro do corpo da função é como se estivesse trabalhando com a variável original, como se ela fosse global...

Se você alterar o nome do parâmetro ele irá criar uma cópia do valor contigo em letras_acertadas, e toda modificação feita dentro da função nessa cópia deve ser retornada ou sumirá no final do processamento da função, como se fosse uma variável local.

Expliquei ou confundi mais? rs

Obrigado pela resposta, era o que imaginava mesmo então, por ter mantido o mesmo nome de variavel, o python mantém a referencia.

Volto aqui no tópico para corrigir a errada informação que eu dei e me desculpar por ela, usei muito a lógica e não testei por estar no celular mas enfim. Como se trata de uma lista o exemplo, só conseguimos mudar ela por ter acessado o index diretamente e alterado, aparentemente ao fazer isso, o python referencia nosso parâmetro com a lista original e faz a troca do valor, mesmo que esteja com NOME DIFERENTE no parâmetro. Porém a alteração não acontece se nós tentarmos alterar a lista toda diretamente, mesmo que TENHA O MESMO NOME.

O exemplo abaixo que testei, e a cada teste eu mudei a forma de alterar o valor e os nomes das variaveis para chegar nessa conclusão

def principal():
    variavel = [1,2,3,4] #cria uma lista dentro da função principal()
    modificar(variavel) #chama nossa função que altera um item da lista

    print(f'Valor no principal() é {variavel}') #chamamos um print dentro dessa função para mostrar o valor da lista "variavel" 

def modificar(outra):
    outra[0] = 4 #modificamos o primeiro item da lista para o valor 4
    print(f'Valor no modificar() é {outra}') #imprimimos na tela para se certificar

principal()