1
resposta

Praticando - Parte final

15) O setor de RH da sua empresa te pediu uma ajuda para analisar as idades de colaboradores(as) de 4 setores da empresa. Para isso, foram fornecidos os seguintes

Dados de idades dos setores

idades_setores = {
'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]
}

Sabendo que cada setor tem 10 colaboradores(as), construa um código que calcule a média de idade de cada setor, a idade média geral entre todos os setores e quanta

1. Calcular a média de idade de cada setor

print('Média de idade por setor:')
medias_setores = {}
total_idades_geral = 0
total_colaboradores_geral = 0

for setor, idades in idades_setores.items():
media_setor = sum(idades) / len(idades)
medias_setores[setor] = media_setor
total_idades_geral += sum(idades)
total_colaboradores_geral += len(idades)
print(f'- {setor}: {media_setor:.2f} anos')

2. Calcular a idade média geral entre todos os setores

media_geral = total_idades_geral / total_colaboradores_geral
print(f'\nIdade média geral de todos os setores: {media_geral:.2f} anos')

3. Contar quantas pessoas estão acima da idade média geral

count_acima_media_geral = 0
for setor, idades in idades_setores.items():
for idade in idades:
if idade > media_geral:
count_acima_media_geral += 1

print(f'Número de colaboradores(as) acima da idade média geral: {count_acima_media_geral}')
Execução / Resultado
Plaintext
Média de idade por setor:

  • Setor A: 39.90 anos
  • Setor B: 42.30 anos
  • Setor C: 35.80 anos
  • Setor D: 36.50 anos

Idade média geral de todos os setores: 38.62 anos
Número de colaboradores(as) acima da idade média geral: 18

1 resposta

Olá, Nicole. Como vai?

Parabéns pela excelente resolução do desafio! O seu código está muito bem estruturado, limpo e a lógica utilizada para resolver as três etapas solicitadas pelo setor de RH está totalmente correta. Os resultados impressos no console refletem exatamente os cálculos matemáticos esperados para o conjunto de dados.

Analisando a sua solução, trouxe alguns complementos e formas alternativas de resolver o mesmo problema utilizando recursos nativos do Python. Isso ajuda bastante a expandir o seu "vocunbulário" na linguagem e a escrever códigos ainda mais concisos.

1. Simplificando a Média Geral

No seu código, você criou duas variáveis (total_idades_geral e total_colaboradores_geral) e alimentou ambas dentro do loop for. Essa abordagem está certinha!

Como alternativa, você poderia calcular a média geral ao final usando as listas que você já possui, ou até mesmo fazendo a média das médias dos setores (já que todos os setores possuem exatamente a mesma quantidade de colaboradores, 10 pessoas). Uma forma direta de somar tudo em apenas uma linha fora do loop seria extrair todos os valores com uma lista compreendida ou usando funções embutidas.

2. Otimizando com List Comprehension (Compreensão de Lista)

No item 3, você utilizou dois loops for aninhados para contar as pessoas acima da média. Essa é a lógica perfeita do pensamento algorítmico!

Em Python, existe um recurso muito poderoso chamado List Comprehension, que nos permite filtrar e contar dados de uma forma muito mais enxuta. Veja como o seu código poderia ser reescrito utilizando essa técnica:

# 1. Calcular a média de idade de cada setor e guardar os totais
print('Média de idade por setor:')
medias_setores = {}

for setor, idades in idades_setores.items():
    media_setor = sum(idades) / len(idades)
    medias_setores[setor] = media_setor
    print(f'- {setor}: {media_setor:.2f} anos')

# 2. Calcular a idade média geral de forma direta
# Aqui somamos a média de todos os setores e dividimos pela quantidade de setores
media_geral = sum(medias_setores.values()) / len(medias_setores)
print(f'\nIdade média geral de todos os setores: {media_geral:.2f} anos')

# 3. Contar quantas pessoas estão acima da idade média geral com List Comprehension
# O código abaixo varre todas as idades de todos os setores em uma única linha
idades_acima_da_media = [idade for idades in idades_setores.values() for idade in idades if idade > media_geral]
count_acima_media_geral = len(idades_acima_da_media)

print(f'Número de colaboradores(as) acima da idade média geral: {count_acima_media_geral}')

O que mudou?

  • sum(medias_setores.values()) / len(medias_setores): Como todos os grupos têm o mesmo tamanho (10), a média global é igual à média das médias. Isso nos poupou de criar variáveis acumuladoras dentro do loop.
  • [idade for idades in idades_setores.values() for idade in idades if ... ]: Essa linha cria uma nova lista contendo apenas as idades que atendem ao critério. Depois, basta usar a função len() para saber o tamanho dessa lista, que é o número exato de colaboradores.

A sua solução original cumpre perfeitamente o papel e mostra que você dominou a manipulação de dicionários e listas no Python. Continue praticando com esse mesmo nível de atenção nos próximos desafios do curso!

Espero que possa ter lhe ajudado!