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

[Desafio] Hora da prática (11-15)

Estou compartilhando as minhas soluções em Python abaixo. Se alguém tiver uma abordagem diferente ou alguma dúvida sobre o código, deixem nos comentários!

  1. Vendas de E-commerce com Dicionário

A função sum(vendas.values()) é excelente para somar todos os valores numéricos de um dicionário. Para achar o mais vendido, a função max() junto com a chave key=vendas.get resolve o problema em uma linha.

vendas = {'Produto A': 300, 'Produto B': 80, 'Produto C': 60,
          'Produto D': 200, 'Produto E': 250, 'Produto F': 30}

total_vendas = sum(vendas.values())

# Encontra a chave (Produto) que possui o maior valor atribuído
produto_mais_vendido = max(vendas, key=vendas.get)

print(f"Total de vendas: {total_vendas} unidades")
print(f"O produto mais vendido foi: {produto_mais_vendido} (com {vendas[produto_mais_vendido]} unidades)")

  1. Pesquisa de Mercado (Marcas)

Adaptei os dados informados no desafio para um dicionário padrão do Python. A lógica de encontrar o maior valor é a mesma do exercício anterior.

votos = {
    'Design 1': 1334,
    'Design 2': 982,
    'Design 3': 1751,
    'Design 4': 210,
    'Design 5': 1811
}

total_votos = sum(votos.values())
design_vencedor = max(votos, key=votos.get)

# Cálculo da porcentagem do vencedor
porcentagem = (votos[design_vencedor] / total_votos) * 100

print(f"O vencedor foi o '{design_vencedor}' com {votos[design_vencedor]} votos.")
print(f"Isso representa {porcentagem:.2f}% do total de votos.")

  1. Cálculo de Abono Salarial

Nesse código, iterei pela lista de salários criando o dicionário em tempo real. Se o cálculo de 10% fosse menor que 200, o valor era ajustado para 200 e o contador de "abonos mínimos" entrava em ação.

salarios = [1172, 1644, 2617, 5130, 5532, 6341, 6650, 7238, 7685, 7782, 7903]
dicionario_abonos = {}
qtd_abono_minimo = 0

for salario in salarios:
    abono = salario * 0.10
    
    if abono < 200:
        abono = 200
        qtd_abono_minimo += 1
        
    # Adiciona a chave (salário) e o valor (abono) no dicionário
    dicionario_abonos[salario] = abono

total_gastos = sum(dicionario_abonos.values())
maior_abono = max(dicionario_abonos.values())

print(f"Total de gastos com o abono: R$ {total_gastos:.2f}")
print(f"Quantidade de colaboradores que receberam o abono mínimo: {qtd_abono_minimo}")
print(f"O maior valor de abono fornecido foi: R$ {maior_abono:.2f}")

  1. Diversidade Biológica por Área

Aqui temos um dicionário contendo listas. O método .items() me permitiu iterar pela chave (nome da área) e pelos valores (a lista de espécies) ao mesmo tempo, facilitando o uso do sum() e len() em cada repetição.

floresta = {
    'Área Norte': [2819, 7236],
    'Área Leste': [1440, 9492],
    'Área Sul': [5969, 7496],
    'Área Oeste': [14446, 49688],
    'Área Centro': [22558, 45148]
}

maior_diversidade = 0
area_campea = ""

print("--- Média de espécies por Área ---")
for area, especies in floresta.items():
    media = sum(especies) / len(especies)
    soma_total = sum(especies)
    
    print(f"{area}: {media:.1f}")
    
    # Verifica quem tem a maior soma total de espécies
    if soma_total > maior_diversidade:
        maior_diversidade = soma_total
        area_campea = area

print(f"\nA área com maior diversidade biológica é a {area_campea} (Total: {maior_diversidade} espécies).")

  1. Análise de Idades do RH

Semelhante ao exercício anterior, mas aqui usei o método .extend() para unir as listas de todos os setores em uma única "lista mestra". Isso tornou muito mais simples o cálculo da média geral da empresa.

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]
}

todas_idades = []

print("--- Média de idade por Setor ---")
for setor, idades in setores.items():
    media_setor = sum(idades) / len(idades)
    print(f"{setor}: {media_setor:.1f} anos")
    
    # Adiciona as idades desse setor na lista geral
    todas_idades.extend(idades)

media_geral = sum(todas_idades) / len(todas_idades)
print(f"\n--- Média Geral da Empresa ---")
print(f"{media_geral:.1f} anos")

pessoas_acima_da_media = 0
for idade in todas_idades:
    if idade > media_geral:
        pessoas_acima_da_media += 1

print(f"\nQuantidade de pessoas acima da idade média geral: {pessoas_acima_da_media}")

Espero que esse material seja útil e contribua para o avanço de vocês nas formações de dados e back-end. Bons estudos!

2 respostas
solução!

Olá, Weriton. Como vai?

Uau, que postagem espetacular! A sua resolução desse bloco de desafios está em um nível de maturidade técnica excelente. Você não apenas resolveu os problemas, mas utilizou recursos nativos do Python que demonstram um ótimo domínio de estruturas de dados e algoritmos de agregação.

O grande destaque do seu código vai para o uso do truque key=vendas.get dentro da função max(). Essa é a forma mais performática e elegante de extrair a chave de um dicionário com base no seu valor, evitando que você precisasse escrever laços de repetição manuais para fazer essa busca.

Para enriquecer o seu repositório de soluções e trazer insights sobre as ótimas escolhas que você fez, separei duas análises técnicas de boas práticas que você aplicou:


1. A Sacada do .extend() vs. .append()

No exercício de Análise de Idades do RH, a sua escolha pelo método .extend() foi cirúrgica.

Muitos estudantes que estão começando se confundem e tentam usar o .append(). O problema é que o .append() adicionaria a lista inteira do setor como um único elemento dentro da lista geral, criando uma lista de listas ([[22, 26...], [22, 24...]]).

Ao usar o .extend(), você realizou uma operação de desempacotamento e concatenação, juntando os números diretamente em uma única estrutura linear (flat list). Isso permitiu que você aplicasse as funções sum() e len() de forma direta no final. Excelente!


2. Otimização Pythonica: Filtragem com List Comprehension

No final do último exercício, você utilizou um laço for tradicional para contar quantas pessoas estavam acima da média:

pessoas_acima_da_media = 0
for idade in todas_idades:
    if idade > media_geral:
        pessoas_acima_da_media += 1

O seu código está perfeito, mas como você está avançando rápido no Python para Dados, vale a pena conhecer uma alternativa extremamente popular no mercado para fazer essa mesma contagem em uma única linha usando List Comprehension combinada com a função len():

# Criamos uma sublista apenas com quem atende à condição e medimos o tamanho dela
pessoas_acima_da_media = len([idade for idade in todas_idades if idade > media_geral])

Essa abordagem é muito utilizada na análise de dados porque simula o comportamento de filtros que você verá mais para a frente em bibliotecas como o Pandas.

Parabéns pelo capricho nas explicações e pelo código limpo e bem comentado. Com certeza esse material vai ajudar muitos colegas que estão quebrando a cabeça nesses mesmos desafios!

Espero que possa ter lhe ajudado e bons estudos!

Salve Evandro! Muito obrigado pelo feedback, e um agradecimento especial pela dica da List Comprehension! Achei sensacional. Ver essa refatoração aplicada diretamente no meu código deixou o conceito muito mais claro. Faz total sentido resolver essa filtragem em uma única linha de forma "pythônica", já preparando o raciocínio para trabalhar com Pandas e análise de dados no futuro. Com certeza vou adotar essa abordagem nos próximos desafios.

Agradeço novamente pelo tempo dedicado à análise e por enriquecer a postagem com esse conhecimento. Seguimos em frente!

Um abraço e bons estudos para todos nós!