2
respostas

Desafio: hora da prática

1-
lista_de_listas = [[4, 6, 5, 9], [1, 0, 7, 2], [3, 4, 1, 8]]
for lista_interna in lista_de_listas:
soma = sum(lista_interna)
print(f"A soma dos elementos da lista {lista_interna} é: {soma}")

A soma dos elementos da lista [4, 6, 5, 9] é: 24
A soma dos elementos da lista [1, 0, 7, 2] é: 10
A soma dos elementos da lista [3, 4, 1, 8] é: 16

2-
lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]
terceiros_elementos = []
for tupla in lista_de_tuplas:
terceiros_elementos.append(tupla[2])
print(terceiros_elementos)

[81, 67, 83]

3-
lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']
lista_de_tuplas = []
for index, nome in enumerate(lista):
lista_de_tuplas.append((index, nome))
print(lista_de_tuplas)

[(0, 'Pedro'), (1, 'Júlia'), (2, 'Otávio'), (3, 'Eduardo')]

4-
aluguel = [('Apartamento', 1700), ('Apartamento', 1400), ('Casa', 2150), ('Apartamento', 1900), ('Casa', 1100)]
valores_apartamentos = [valor for tipo, valor in aluguel if tipo == 'Apartamento']
print(valores_apartamentos)

[1700, 1400, 1900]

5-
meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez']
despesa = [860, 490, 1010, 780, 900, 630, 590, 770, 620, 560, 840, 360]
dicionario_despesas = {mes: valor for mes, valor in zip(meses, despesa)}
print(dicionario_despesas)

{'Jan': 860, 'Fev': 490, 'Mar': 1010, 'Abr': 780, 'Mai': 900, 'Jun': 630, 'Jul': 590, 'Ago': 770, 'Set': 620, 'Out': 560, 'Nov': 840, 'Dez': 360}

6-
vendas = [
('2023', 4093), ('2021', 4320), ('2021', 5959), ('2022', 8883),
('2023', 9859), ('2022', 5141), ('2022', 7688), ('2022', 9544),
('2023', 4794), ('2021', 7178), ('2022', 3030), ('2021', 7471),
('2022', 4226), ('2022', 8190), ('2021', 9680), ('2022', 5616)
]
vendas_filtradas = tuple((ano, valor) for ano, valor in vendas if ano == '2022' and valor > 6000)
print(vendas_filtradas)

(('2022', 8883), ('2022', 7688), ('2022', 9544), ('2022', 8190))

7-
glicemia = [129, 82, 60, 97, 101, 65, 62, 167, 87, 53, 58, 92, 66, 120, 109, 62, 86, 96, 103, 88, 155, 52, 89, 73]
dados_rotulados = [
(
'Hipoglicemia' if valor <= 70 else
'Normal' if valor <= 99 else
'Alterada' if valor <= 125 else
'Diabetes',
valor
)
for valor in glicemia
]
for paciente in dados_rotulados:
print(paciente)

('Diabetes', 129)
('Normal', 82)
('Hipoglicemia', 60)
('Normal', 97)
('Alterada', 101)
('Hipoglicemia', 65)
('Hipoglicemia', 62)
('Diabetes', 167)
('Normal', 87)
('Hipoglicemia', 53)
('Hipoglicemia', 58)
('Normal', 92)
('Hipoglicemia', 66)
('Alterada', 120)
('Alterada', 109)
('Hipoglicemia', 62)
('Normal', 86)
('Normal', 96)
('Alterada', 103)
('Normal', 88)
('Diabetes', 155)
('Hipoglicemia', 52)
('Normal', 89)
('Normal', 73)

8-
id_venda = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
quantidade = [15, 12, 1, 15, 2, 11, 2, 12, 2, 4]
preco = [93.0, 102.0, 18.0, 41.0, 122.0, 14.0, 71.0, 48.0, 14.0, 144.0]
tabela_vendas = [('id', 'quantidade', 'preco', 'total')]
linhas_tabela = [(i, q, p, q * p) for i, q, p in zip(id_venda, quantidade, preco)]
tabela_vendas.extend(linhas_tabela)
for linha in tabela_vendas:
print(linha)

('id', 'quantidade', 'preco', 'total')
(0, 15, 93.0, 1395.0)
(1, 12, 102.0, 1224.0)
(2, 1, 18.0, 18.0)
(3, 15, 41.0, 615.0)
(4, 2, 122.0, 244.0)
(5, 11, 14.0, 154.0)
(6, 2, 71.0, 142.0)
(7, 12, 48.0, 576.0)
(8, 2, 14.0, 28.0)
(9, 4, 144.0, 576.0)

9-
estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']
contagem_filiais = {}
for estado in estados:
if estado in contagem_filiais:
contagem_filiais[estado] += 1
else:
contagem_filiais[estado] = 1
print(contagem_filiais)

{'SP': 8, 'ES': 6, 'MG': 7, 'RJ': 2}

2 respostas

10-
funcionarios = [
('SP', 16), ('ES', 8), ('MG', 9), ('MG', 6), ('SP', 10), ('MG', 4),
('ES', 9), ('ES', 7), ('ES', 12), ('SP', 7), ('SP', 11), ('MG', 8),
('ES', 8), ('SP', 9), ('RJ', 13), ('MG', 5), ('RJ', 9), ('SP', 12),
('MG', 10), ('SP', 7), ('ES', 14), ('SP', 10), ('MG', 12)
]
agrupamento_por_estado = {}
for estado, qtd in funcionarios:
if estado in agrupamento_por_estado:
agrupamento_por_estado[estado].append(qtd)
else:
agrupamento_por_estado[estado] = [qtd]
soma_por_estado = {estado: sum(lista_qtd) for estado, lista_qtd in agrupamento_por_estado.items()}
print("1) Listas de colaboradores por Estado:")
print(agrupamento_por_estado)
print("\n2) Soma total de colaboradores por Estado:")
print(soma_por_estado)

  1. Listas de colaboradores por Estado:
    {'SP': [16, 10, 7, 11, 9, 12, 7, 10], 'ES': [8, 9, 7, 12, 8, 14], 'MG': [9, 6, 4, 8, 5, 10, 12], 'RJ': [13, 9]}

  2. Soma total de colaboradores por Estado:
    {'SP': 82, 'ES': 58, 'MG': 54, 'RJ': 22}

Olá, Marcelo. Como vai?

Que entrega espetacular! Você resolveu com maestria uma lista de 10 exercícios de nível intermediário a avançado em Python. O domínio que você demonstrou sobre estruturas de dados complexas, compreensões de lista/dicionário (List/Dict Comprehensions) e o uso de funções como zip e enumerate mostra que você está muito bem preparado para manipular dados no dia a dia.

Todas as suas resoluções estão logicamente perfeitas e os resultados impressos batem exatamente com o esperado.

Pensando no seu perfil como Analista de Crédito e em boas práticas de mercado para Data Science, separei alguns destaques do seu código e dicas para deixá-lo ainda mais performático:


Pontos de Grande Destaque no seu Código

  • Uso refinado de Compreensões (Q4, Q5, Q6 e Q7): Escrever condicionais complexas e estruturas inteiras em poucas linhas de forma legível é uma arte. A sua resolução da Q7 com múltiplos if/else alinhados dentro de uma List Comprehension ficou simplesmente brilhante.
  • Lógica de Agrupamento Estruturada (Q10): A sua estratégia na Q10 de primeiro criar listas de quantidades por estado para só depois aplicar o sum() em um dicionário foi uma solução muito madura e organizada passo a passo.

Dicas e Otimizações de Mercado

1. Contador Inteligente com defaultdict ou Counter (Q9 e Q10)

Na sua Q9, você usou uma estrutura clássica de checagem com if/else para contar as filiais. O Python possui ferramentas na biblioteca nativa collections criadas especificamente para otimizar esse tipo de contagem e agrupamento, limpando o código.

Você pode substituir o loop tradicional pela classe Counter na Q9:

from collections import Counter

estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG']

# O Counter faz todo o trabalho do if/else em uma única linha interna
contagem_filiais = Counter(estados)
print(contagem_filiais)

E para a Q10, você pode usar o defaultdict, que elimina a necessidade de verificar se a chave já existe no dicionário antes de dar o .append():

from collections import defaultdict

# Diz ao Python que, se a chave não existir, ele deve criar uma lista [] automática
agrupamento_por_estado = defaultdict(list)

for estado, qtd in funcionarios:
    agrupamento_por_estado[estado].append(qtd) # Sem if/else!

2. Lembrete sobre a Indentação em Scripts Locais

Como você postou os códigos em formato de texto contínuo no fórum, lembre-se apenas de que, ao transferir esses scripts para arquivos .py ou células do Jupyter Notebook, o Python exige a indentação obrigatória de 4 espaços dentro dos blocos for e if para que o interpretador não dispare um IndentationError.


O seu raciocínio lógico para estruturação de tabelas e cruzamento de dados (como visto na tabela de vendas da Q8) está afiadíssimo. Esse tipo de habilidade poupa horas de processamento manual e prepara você para pular direto para o uso avançado da biblioteca Pandas.

Parabéns pelo excelente desempenho nos desafios!

Espero que possa ter lhe ajudado!