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 ✓.