Estou compartilhando as minhas resoluções da seção "Aplicando a projetos" para trocarmos ideias. Caso alguém tenha resolvido de uma forma diferente, deixem nos comentários!
- Análise de Desempenho de Estudantes
Criei a função retornando múltiplos valores de uma só vez (um recurso excelente do Python chamado desempacotamento de tuplas). Como o exercício não especificou a média de corte, assumi 6.0 como padrão para aprovação.
def analisa_estudante(notas):
maior = max(notas)
menor = min(notas)
media = sum(notas) / len(notas)
# Operador ternário para definir a situação em uma linha
situacao = "Aprovado(a)" if media >= 6.0 else "Reprovado(a)"
return maior, menor, media, situacao
notas_aluno = [5.5, 8.0, 6.5, 7.0]
maior_nota, menor_nota, media_aluno, status = analisa_estudante(notas_aluno)
print(f"O(a) estudante obteve uma média de {media_aluno:.1f}, com a sua maior nota de {maior_nota} pontos e a menor nota de {menor_nota} pontos e foi {status}.")
- Tratamento de Nomes com
map()
Aqui o poder do map() com lambda brilha muito. A função capitalize() garante que apenas a primeira letra fique maiúscula, corrigindo perfeitamente as inconsistências da lista original.
nomes = ["joão", "MaRia", "JOSÉ"]
sobrenomes = ["SILVA", "souza", "Tavares"]
# O map aplica a função lambda iterando simultaneamente pelas duas listas
nomes_completos = list(map(lambda n, s: f"{n.capitalize()} {s.capitalize()}", nomes, sobrenomes))
for nome in nomes_completos:
print(f"Nome completo: {nome}")
- Desempenho do Time de Futebol
Para percorrer as duas listas (marcados e sofridos) ao mesmo tempo sem precisar usar índices numéricos (i), a função zip() é a melhor escolha.
def calcula_pontos(marcados, sofridos):
pontos = 0
# O zip junta os elementos de mesmo índice das duas listas
for m, s in zip(marcados, sofridos):
if m > s:
pontos += 3 # Vitória
elif m == s:
pontos += 1 # Empate
pontuacao_maxima = len(marcados) * 3
aproveitamento = (pontos / pontuacao_maxima) * 100
return pontos, aproveitamento
gols_marcados = [2, 1, 3, 1, 0]
gols_sofridos = [1, 2, 2, 1, 3]
pontos_finais, aprov_final = calcula_pontos(gols_marcados, gols_sofridos)
print(f"A pontuação do time foi de {pontos_finais} e seu aproveitamento foi de {aprov_final:.1f}%")
- Calculadora de Viagens
Para organizar os dados, criei listas globais com as informações na mesma ordem (índice 0 = Salvador, índice 1 = Fortaleza, etc.). O método .index() permite encontrar rapidamente a posição da cidade escolhida para buscar seus respectivos valores.
# Dados base
cidades = ["Salvador", "Fortaleza", "Natal", "Aracaju"]
distancias = [850, 800, 300, 550] # km (apenas ida)
custo_passeios = [200, 400, 250, 300] # reais/dia
def gasto_hotel(dias):
return dias * 150
def gasto_gasolina(cidade):
idx = cidades.index(cidade)
# Multiplicamos por 2 para considerar ida e volta
distancia_total = distancias[idx] * 2
litros_necessarios = distancia_total / 14
return litros_necessarios * 5
def gasto_passeio(cidade, dias):
idx = cidades.index(cidade)
return custo_passeios[idx] * dias
# Simulando a viagem
destino = "Salvador"
dias_viagem = 3
total_hotel = gasto_hotel(dias_viagem)
total_gasolina = gasto_gasolina(destino)
total_passeio = gasto_passeio(destino, dias_viagem)
custo_total = total_hotel + total_gasolina + total_passeio
print(f"Com base nos gastos definidos, uma viagem de {dias_viagem} dias para {destino} saindo de Recife custaria R$ {custo_total:.2f}")
- Processamento de Linguagem Natural (NLP) e filter()
Para higienizar o texto, usei um laço rápido para substituir pontuações. Depois, o filter() aliado ao lambda extraiu apenas as palavras exigidas pela regra de negócio de forma muito eficiente.
frase = "Aprender Python aqui na Alura é muito bom"
# Tratamento da string (removendo pontuações indesejadas)
pontuacoes = [',', '.', '!', '?']
for p in pontuacoes:
frase = frase.replace(p, ' ')
# Separando a frase em uma lista de palavras
palavras = frase.split()
# Filtrando palavras com 5 ou mais caracteres
palavras_filtradas = list(filter(lambda p: len(p) >= 5, palavras))
print("Palavras com 5 ou mais caracteres:")
print(palavras_filtradas)
Espero que esses códigos tragam bons insights para quem está estudando. Aprender a dominar esses recursos funcionais do Python economiza muitas linhas de código no futuro! Bons estudos!