1
resposta

Tentativa com Python

Tentei replicar o problema em Python e, de cara, não entendi o resultado. Alguém consegue me explicar o por que do resultado desse código e a solução para o exercício proposto? Vlws e desculpem a noobice!

def calcula_proxima_idade(idade):
    idade += 1
    print(idade)

def calcula_proximas_idades(idades):
    for idade in idades:
        idade += 1
    print(idades)

def calcula_idades_daqui_5anos(idades):
    for idade in idades:
        idade += 5
    print(idades)

idade_stefany = 21
calcula_proxima_idade(idade_stefany)
idades_amigos = [idade_stefany, 20, 23, 18, 7]
calcula_proximas_idades(idades_amigos)
calcula_idades_daqui_5anos(idades_amigos)

Resultado:
22
[21, 20, 23, 18, 7]
[21, 20, 23, 18, 7]
1 resposta

Oi, Leandro! Tudo bem?

Desde já, peço desculpas pela demora em retornar.

Quando estamos aprendendo uma linguagem de programação nova, é comum nos depararmos com dúvidas a respeito dos comandos usados para compor nosso código. Com o tempo, vamos ampliando o nosso entendimento e a nossa percepção sobre as coisas.

O resultado que você compartilhou ocorre, pois quando somamos um número às idades dentro de cada for das funções calcula_proximas_idades e calcula_idades_daqui_5anos, o Python, por baixo dos panos, cria uma nova variável, ou seja, uma variável isolada que não faz parte de nenhuma lista e também que não aponta para a mesma posição na memória dos itens da lista idades_amigos.

Logo, quando executamos idade += 1, estamos alterando uma variável que não faz parte de nenhuma lista — como consequência, print(idades) mostrará a idades sem mudanças. Para solucionar esse problema, precisaremos seguir algumas etapas, observe:

1 - Copiar a lista passada como parâmetro nas funções

Como não queremos modificar a lista original, podemos fazer uma cópia dela. Assim, quando somarmos novos valores às idades, a mudança não impactará na lista real idades_amigos, somente em suas cópias. Para isso, usaremos um método do Python chamado copy, observe:

def calcula_proximas_idades(idades):
    idades_mais_um = idades.copy()
    # restante do código vem aqui

def calcula_idades_daqui_5anos(idades):
    idades_mais_cinco = idades.copy()
    # restante do código vem aqui

Nas duas funções acima, criamos novas variáveis que irão armazenar uma cópia de idades (parâmetro que contém a lista idades_amigos).

2 - Alterar o laço de repetição for das duas funções

Primeira função - calcula_proximas_idades

for indice in range(len(idades_mais_um)):
  idades_mais_um[indice] += 1

Com esse código, temos que:

  • Será percorrida uma lista cujos elementos correspondem aos índices da lista idades_mais_um. No Python, o índice começa com o número 0, então, teremos a seguinte lista: [0, 1, 2, 3, 4]. Enquanto o método len() irá contar o tamanho da lista idades_mais_um, o método range() irá construir essa lista de números que conversamos;

  • indice representará cada um desses números durante a repetição;

  • idades_mais_um[indice] indicará um item específico da lista idades_mais_um. Para obter o valor de um elemento de uma lista, precisamos chamá-la, abrir colchetes, indicar o seu índice e fechar colchetes, e é isso que estamos fazendo durante a repetição! Por exemplo: quando indice for igual a zero, idades_mais_um[indice] será a idade de Stefany, nosso primeiro elemento da lista;

  • Ao obter determinado elemento da lista idades_mais_um com idades_mais_um[indice], o somamos com o número 1.

Segunda função - calcula_idades_daqui_5anos

A ideia que implementaremos na segunda função seguirá a mesma lógica da primeira, as únicas diferenças serão a lista em que iremos trabalhar e o valor a ser somado, veja:

for indice in range(len(idades_mais_cinco)):
  idades_mais_cinco[i] += 5

3 - Alterar o valor a ser printado

Para printar as novas listas, teremos que passar em cada print() as novas listas que criamos, assim:

def calcula_proximas_idades(idades):
    # restante do código vem aqui
    print(idades_mais_um)
def calcula_idades_daqui_5anos(idades):
    # restante do código vem aqui
    print(idades_mais_cinco)

Por fim, ao executar o código, chegaremos no seguinte resultado:

22
[22, 21, 24, 19, 8]
[26, 25, 28, 23, 12]

A primeira linha corresponde à idade de Stefany, a segunda à lista das idades mais 1 e a terceira, à lista das idades mais 5!

Leandro, caso queira analisar o código por completo, está aqui:

def calcula_proxima_idade(idade):
    idade += 1
    print(idade)

def calcula_proximas_idades(idades):
    idades_mais_um = idades.copy()
    for i in range(len(idades_mais_um)):
        idades_mais_um[i] += 1
    print(idades_mais_um)

def calcula_idades_daqui_5anos(idades):
    idades_mais_cinco = idades.copy()
    for i in range(len(idades_mais_cinco)):
        idades_mais_cinco[i] += 5
    print(idades_mais_cinco)

idade_stefany = 21
calcula_proxima_idade(idade_stefany)
idades_amigos = [idade_stefany, 20, 23, 18, 7]
calcula_proximas_idades(idades_amigos)
calcula_idades_daqui_5anos(idades_amigos)

Espero ter ajudado, Leandro! Continue se dedicando e se surgir alguma dúvida após minha explicação ou durante os seus estudos, fico à disposição.

Abraços!

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