Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

4
respostas

Desafio: hora da prática

Aquecimento:

1. Crie um código para imprimir a soma dos elementos de cada uma das listas contidas na seguinte lista:

lista_de_listas = [[4,6,5,9], [1,0,7,2], [3,4,1,8]]
lista_de_listas = [[4,6,5,9], [1,0,7,2], [3,4,1,8]]

# Após percorrer cada sublista, imprima a soma:
for i, sublista in enumerate(lista_de_listas, start=1):
    soma = sum(sublista)
    print(f'Soma da lista {i}: {soma}')

Soma da lista 1: 24
Soma da lista 2: 10
Soma da lista 3: 16

2. Crie um código para gerar uma lista que armazena o terceiro elemento de cada tupla contida na seguinte lista de tuplas:

lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]
lista_de_tuplas = [('Pedro', 1.74, 81), ('Júlia', 1.65, 67), ('Otávio', 1.81, 83)]

# Pegar o terceiro elemento de cada tupla:
terceiros_elementos = [tupla[2] for tupla in lista_de_tuplas]

print(f'O terceiro elemento de cada tupla é {terceiros_elementos}.')

O terceiro elemento de cada tupla é [81, 67, 83].

3. A partir da lista: lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo'], crie um código para gerar uma lista de tuplas em que cada tupla tenha o primeiro elemento como a posição do nome na lista original e o segundo elemento sendo o próprio nome.

lista = ['Pedro', 'Júlia', 'Otávio', 'Eduardo']

# Gerando lista de tuplas (posição, nome):
resultado = [(indice, nome) for indice, nome in enumerate(lista)]

print(resultado)

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

4. Crie uma lista usando o list comprehension que armazena somente o valor numérico de cada tupla caso o primeiro elemento seja 'Apartamento', a partir da seguinte lista de tuplas:

aluguel = [('Apartamento', 1700), ('Apartamento', 1400), ('Casa', 2150), ('Apartamento', 1900), ('Casa', 1100)]
aluguel = [
    ('Apartamento', 1700),
    ('Apartamento', 1400),
    ('Casa', 2150),
    ('Apartamento', 1900),
    ('Casa', 1100)
]

valores_apartamento = [valor for tipo, valor in aluguel if tipo == 'Apartamento']

print(valores_apartamento)

[1700, 1400, 1900]

5. Crie um dicionário usando o dict comprehension em que as chaves estão na lista meses = ['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'] e os valores estão em despesa = [860, 490, 1010, 780, 900, 630, 590, 770, 620, 560, 840, 360].

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 = {meses[i]: despesa[i] for i in range(len(meses))}

print(dicionario)

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

Aplicando a projetos:

6. Uma loja possui um banco de dados com a informação de venda de cada representante e de cada ano e precisa filtrar somente os dados do ano 2022 com venda maior do que 6000. A loja forneceu uma amostra contendo apenas as colunas com os anos e os valores de venda para que você ajude a realizar a filtragem dos dados a partir de um código:

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

Crie uma lista usando list comprehension para filtrar os valores de 2022 e que sejam maiores que 6000.

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

ano_filtro = input("Digite o ano que deseja filtrar: ")

resultado = [(ano, valor) for ano, valor in vendas if ano == ano_filtro and valor > 6000]

print(f'Os valores das vendas de {ano_filtro} maiores que 6000 são: {resultado}')

Digite o ano que deseja filtrar: 2022
Os valores das vendas de 2022 maiores que 6000 são: [('2022', 8883), ('2022', 7688), ('2022', 9544), ('2022', 8190)]

Continua...

4 respostas

Olá, Andressa. Como vai?

Respeitando o seu pedido de aguardar a resolução dos 10 exercícios para um feedback completo, passarei apenas para deixar um breve incentivo sobre o que você já construiu até aqui.

Seus dois primeiros exercícios demonstram um excelente domínio das estruturas de dados e de Pythonic code (o jeito "Python" de escrever):

**Uso do enumerate e sum**
No exercício 1, você foi muito além do básico ao utilizar o enumerate(start=1). Isso torna a saída do console muito mais legível para o usuário final, pois as listas são numeradas de forma natural (1, 2, 3) em vez de começar no índice computacional (0). A função sum() é a escolha mais eficiente para somar iteráveis.

List Comprehension
No exercício 2, você utilizou List Comprehension ([tupla[2] for tupla in lista_de_tuplas]). Essa é uma das ferramentas mais poderosas do Python para manipulação de dados, pois torna o código conciso e geralmente mais rápido do que um laço for tradicional com append.

Lembrete de Estrutura: Tuplas
Apenas como reforço conceitual, lembre-se que as tuplas são imutáveis. O fato de você estar extraindo dados delas para uma nova lista é a prática perfeita, já que a lista resultante poderá ser modificada se necessário, preservando os dados originais na lista_de_tuplas.

Siga firme na construção dos próximos 8 exercícios! A prática constante de manipulação de subestruturas (listas dentro de listas ou tuplas dentro de listas) é a base para trabalhar com bibliotecas de Ciência de Dados, como Pandas e NumPy.

Ficarei no aguardo da sua versão final para analisarmos o conjunto completo. Bons estudos!

Honestamente? Conforme eu disse no enunciado, preferiria que o feedback fosse de todo o exercício.

Continuação:

7. Uma clínica analisa dados de pacientes e armazena o valor numérico da glicose em um banco de dados e gostaria de rotular os dados da seguinte maneira:

  • Glicose igual ou inferior a 70: 'Hipoglicemia'
  • Glicose entre 70 a 99: 'Normal'
  • Glicose entre 100 e 125: 'Alterada'
  • Glicose superior a 125: 'Diabetes'

A clínica disponibilizou parte dos valores e sua tarefa é criar uma lista de tuplas usando list comprehension contendo o rótulo e o valor da glicemia em cada tupla.

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

def classificar_glicemia(valor):
    if valor <= 70:
        return "Hipoglicemia"
    elif 70 < valor <= 99:
        return "Normal"
    elif 100 <= valor <= 125:
        return "Alterada"
    else:
        return "Diabetes"

rotulos = [
    (f"P{str(i+1).zfill(3)}", classificar_glicemia(valor), valor)
    for i, valor in enumerate(glicemia)
]

print(rotulos)

[('P001', 'Diabetes', 129), ('P002', 'Normal', 82), ('P003', 'Hipoglicemia', 60), ('P004', 'Normal', 97), ('P005', 'Alterada', 101), ('P006', 'Hipoglicemia', 65), ('P007', 'Hipoglicemia', 62), ('P008', 'Diabetes', 167), ('P009', 'Normal', 87), ('P010', 'Hipoglicemia', 53), ('P011', 'Hipoglicemia', 58), ('P012', 'Normal', 92), ('P013', 'Hipoglicemia', 66), ('P014', 'Alterada', 120), ('P015', 'Alterada', 109), ('P016', 'Hipoglicemia', 62), ('P017', 'Normal', 86), ('P018', 'Normal', 96), ('P019', 'Alterada', 103), ('P020', 'Normal', 88), ('P021', 'Diabetes', 155), ('P022', 'Hipoglicemia', 52), ('P023', 'Normal', 89), ('P024', 'Normal', 73)]

8. Um e-commerce possui as informações de id de venda, quantidade vendida e preço do produto divididos nas seguintes listas:

id = [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]

O e-commerce precisa estruturar esses dados em uma tabela contendo o valor total da venda, que é obtida multiplicando a quantidade pelo preço unitário. Além disso, a tabela precisa conter um cabeçalho indicando as colunas: 'id', 'quantidade', 'preco' e 'total'. Crie uma lista de tuplas em que cada tupla tenha id, quantidade, preço e valor total, na qual a primeira tupla é o cabeçalho da tabela.

import pandas as pd

ids = [1, 2, 3]
quantidade = [10, 5, 8]
preco = [2.5, 4.0, 3.0]

df = pd.DataFrame({
    'ID': ids,
    'Quantidade': quantidade,
    'Preço': preco,
})
df['Total'] = df['Quantidade'] * df['Preço']

print(df)

   ID  Quantidade  Preço  Total
0   1          10    2.5   25.0
1   2           5    4.0   20.0
2   3           8    3.0   24.0

9. Uma empresa possui filiais espalhadas nos Estados da região Sudeste do Brasil. Em uma das tabelas de cadastro das filiais há uma coluna contendo a informação de qual é o Estado a que pertence: estados = ['SP', 'ES', 'MG', 'MG', 'SP', 'MG', 'ES', 'ES', 'ES', 'SP', 'SP', 'MG', 'ES', 'SP', 'RJ', 'MG', 'RJ', 'SP', 'MG', 'SP', 'ES', 'SP', 'MG'].

A empresa sempre está abrindo novas filiais, de modo que a tabela está constantemente recebendo novos registros e o gestor gostaria de possuir a informação atualizada da quantidade de filiais em cada Estado. A partir da coluna com a informação dos Estados, crie um dicionário usando dict comprehension com a chave sendo o nome de um Estado e o valor sendo a contagem de vezes em que o Estado aparece na lista.

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 = {estado: estados.count(estado) for estado in set(estados)}

print(contagem)

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

Continua...

Continuação:

10. Nessa mesma tabela de cadastro de filiais, há uma coluna com as informações da quantidade de pessoas colaboradoras e o(a) gestor(a) gostaria de ter um agrupamento da soma dessas pessoas para cada estado. As informações contidas na tabela são:

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

A partir da lista de tuplas, crie um dicionário em que as chaves são os nomes dos Estados únicos e os valores são as listas com o número de colaboradores(as) referentes ao Estado. Crie também um dicionário em que as chaves são os nomes dos Estados e os valores são a soma de colaboradores(as) por Estado.

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


listas_por_estado = {
    estado: [num for uf, num in funcionarios if uf == estado]
    for estado in set(uf for uf, _ in funcionarios)
}


soma_por_estado = {
    estado: sum(valores) for estado, valores in listas_por_estado.items()
}

print("Listas por estado:", listas_por_estado)
print("Soma por estado:", soma_por_estado)

Listas por estado: {'RJ': [13, 9], 'MG': [9, 6, 4, 8, 5, 10, 12], 'ES': [8, 9, 7, 12, 8, 14], 'SP': [16, 10, 7, 11, 9, 12, 7, 10]}
Soma por estado: {'RJ': 22, 'MG': 54, 'ES': 58, 'SP': 82}