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

Dúvida sobre a função marca_chute_correto

Olá, fiquei com uma dúvida sobre a função marca_chute_correto()

Como feito pelo professor, o código ficou o segunite:

def marca_chute_correto(chute, letras_acertadas, palavra_secreta):
    index = 0
    for letra in palavra_secreta:
        if chute == letra:
            **letras_acertadas[index] = letra**
        index += 1

No entanto, não entendi como a alteração feita em letras_acertadas dentro da função surtiu efeito fora dela. Poderiam me explicar?

5 respostas

Como você tá passando a lista letras_acertadas na chamada da função, a função consegue acessar essa lista e alterá-la. É por isso que o que foi feito dentro da função também tem efeito fora dela.

Isso seria chamado de passagem por referência? Qualquer parametro em Python é naturalmente por referência?

solução!

Passagem por referência, pelo que aprendi programando em C, é algo diferente do que acontece em python. Também sou novo em Python. Mas encontrei algo que pode esclarecer a tua dúvida.

"É possível modificar um valor de uma variável dentro de uma função? A maioria das linguagens (C, java…) fazem distinção de uma passagem por valor e por referência. No Python, tal distinção é, de certa forma, artificial, e é um pouco sutil quando suas variáveis serão modificadas ou não. Felizmente, existem regras claras.

Parâmetros para funções são referências à objetos que são passados por valor. Quando se passa uma variável a uma função, o python passa a referência ao objeto ao qual a variável se refere (o valor), e não a variável propriamente dita.

Se o valor é imutável, a função não modifica a variável chamada. Se o valor é mutável, a função pode modificar a variável chamada."

Fonte: http://www.estruturas.ufpr.br/disciplinas/pos-graduacao/introducao-a-computacao-cientifica-com-python/introducao-python/1-4-funcoes/#:~:text=Par%C3%A2metros%20para%20fun%C3%A7%C3%B5es%20s%C3%A3o%20refer%C3%AAncias,n%C3%A3o%20modifica%20a%20vari%C3%A1vel%20chamada

Obrigado @Jefferson por tirar a minha dúvida!! Gratidão!

Por nada!

Abraço! :)