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

[Dúvida] como esse código funciona?

ao fazer a atividade número 15 do curso, encontrei esse tipo de código:

for setor, idades in dados.items():
  for idade in idades:
    if idade > media_geral:
      lista_pessoas_acima_media.append(idade)
print(f'A quantidade de pessoas acima da média geral é : {len(lista_pessoas_acima_media)}')

fiquei em dúvida de como esse tipo de código funciona, agradeceria se alguém pudesse esclarecer como esse tipo de código funciona estou disposto a esclarecer mais informações caso necessário

1 resposta
solução!

Olá, Pedro! Como vai?

Antes de tudo, é preciso entender o que o primeiro for está percorrendo, no caso estamos iterando sobre dados.items().

Mas Daniel, eu não poderia iterar sobre dados? Preciso mesmo iterar sobre dados.items()? A questão é que como os dados são um dicionário, ao usar dados.items(), estamos retornando um objeto no formato de tuplas. O que vai facilitar muito o acesso aos pares de chave-valor.

E repare que, se exibirmos o resultado de dados.items(), temos o seguinte retorno:

dict_items([('Setor A', [22, 26, 30, 30, 35, 38, 40, 56, 57, 65]), 
            ('Setor B', [22, 24, 26, 33, 41, 49, 50, 54, 60, 64]), 
            ('Setor C', [23, 26, 26, 29, 34, 35, 36, 41, 52, 56]), 
            ('Setor D', [19, 20, 25, 27, 34, 39, 42, 44, 50, 65])])

Ou seja, em cada tupla temos uma string com o setor (chave) e um array com as idades (valor).

Sabendo disso, podemos então entender o porquê do seguinte trecho:

for setor, idades in dados.items():
  • Primeiro eu uso um for para percorrer cada tupla dentro do objeto dados.items()
  • Depois crio uma variável setor que vai receber a string de cada tupla ('Setor A', 'Setor B', ...)
  • Por fim crio uma variável idades que vai receber o array de cada tupla ([22, 26, 30, 30, 35, 38, 40, 56, 57, 65], [22, 24, 26, 33, 41, 49, 50, 54, 60, 64], ...)

Já que a variável idades está sendo um array a cada iteração, por exemplo:

  • [22, 26, 30, 30, 35, 38, 40, 56, 57, 65]

Eu posso analisar cada idade dentro desse array usando mais um laço for. Dessa maneira:

for idade in idades:
    if idade > media_geral:
      lista_pessoas_acima_media.append(idade)

E dentro desse loop estamos analisando se:

  • 22 > media_geral
  • 26 > media_geral
  • 30 > media_geral
  • ...

Caso positivo, essa idade é adicionada em uma lista chamada lista_pessoas_acima_media.

Legal, não é? Sempre que precisar entender um código, busque entendê-lo linha por linha. Repare que, se eu não entendo a primeira linha, não há como entender o que está rolando nas linhas seguintes.

Espero ter te ajudado, Pedro! E fico à disposição se precisar.

Abraço e bons estudos!

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