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

[Projeto] 12 Desafio: hora da prática: Funções

#1
lista = [16, 14, 63, 65, 17, 99, 70, 11, 20, 48, 79, 32, 17, 89, 12, 25, 66]
maior = max(lista)
menor = min(lista)
tam = len(lista)
soma = sum(lista)

print(f"A lista possui {tam} números em que o maior número é {maior} e o menor número é {menor}. A soma dos valores presentes nela é igual a {soma}")
#2
def tabuada(num):
  print(f"Tabuada do {num}:")
  for i in range(1,11):
    print(f"{num} x {i} = {num*i}")

num = int(input("Digite um número: "))

tabuada(num)
#3
def mult_n(lista : list, n: int) -> list:
  '''
  Função que recebe uma lista e um número inteiro e retorna uma lista com os múltiplos do número inteiro.
  Parâmetros:
  lista: lista de números inteiros
  n: número inteiro multiplo
  Retorna:
  lista_multiplos: lista com os múltiplos do número inteiro
  '''

  lista_multiplos = []

  for i in lista:
    if i % n == 0:
      lista_multiplos.append(i)
  return lista_multiplos

mult_3 = mult_n([97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99], 3)
print(mult_3)
#4


lista = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
quadrados = list(map(lambda x: x**2, lista))
print(quadrados)
#5
def calc_pontuacao(notas : list) -> float:
  minimo = min(notas)
  maximo = max(notas)
  notas.remove(minimo)
  notas.remove(maximo)
  media = sum(notas)/len(notas)
  return media

notas = []
for i in range(5):
  notas.append(float(input(f"Digite a {i+1}ª nota: ")))

media_calculada = calc_pontuacao(notas)
print(f'Nota da manobra: {media_calculada}')
#6
def calc_desempenho_estudante(notas : list) -> tuple[float, float, float, str]:
  media = sum(notas)/len(notas)
  maior_nota = max(notas)
  menor_nota = min(notas)

  if media >= 6:
    situacao = "Aprovado(a)"
  else:
    situacao = "Reprovado(a)"

  return maior_nota, menor_nota, media, situacao


notas = []
for i in range(4):
  nota = float(input(f"Digite a {i+1}ª nota: "))
  notas.append(nota)

maior, menor, media, situacao = calc_desempenho_estudante(notas)
print(f"O(a) estudante obteve uma média de {media}, com a sua maior nota de {maior} pontos e a menor nota de {menor} pontos e foi {situacao}")
nomes = ["joão", "MaRia", "JOSÉ"]
sobrenomes = ["SILVA", "souza", "Tavares"]

nome_sobrenome = []

nome_sobrenome = map(lambda x, y: x.lower().capitalize() + " " + y.lower().capitalize(), nomes, sobrenomes)
print(list(nome_sobrenome))
#8
def calcula_pontos(nums1 : list, nums2 : list) -> tuple[int, float]:
  pontos = 0

  for i in range(len(nums1)):
    if nums1[i] > nums2[i]:
      pontos += 3
    elif nums1[i] == nums2[i]:
      pontos += 1

  aproveitamento = (pontos / (len(nums1)*3))*100

  return pontos, aproveitamento


gols_marcados = [2, 1, 3, 1, 0]
gols_sofridos = [1, 2, 2, 1, 3]

pontos, aproveitamento = calcula_pontos(gols_marcados, gols_sofridos)
print(f"A pontuação do time foi de {pontos} e seu aproveitamento foi de {aproveitamento}%")
#9

def gasto_hotel(dias : int) -> float:
  return dias * 150

def gasto_gasolina(distancia : int) -> float:
  return (distancia/14)*5.0

def gasto_passeio(dias : int, custo: int) -> float:
  return dias * custo

cidades = ["Salvador", "Fortaleza", "Natal", "Aracaju"]
distancias = [850, 800, 300, 550]
gastos = [200, 400, 250, 300]

distancias = dict(zip(cidades, distancias))
custos = dict(zip(cidades, gastos))

distancia = 0
custo = 0
cidade = None

cidade = str(input("Digite a cidade de destino: ")).lower().capitalize()
dias = int(input("Digite a quantidade de dias da viagem: "))

if cidade in cidades:
  distancia = distancias[cidade]
  custo = custos[cidade]


gastos_hotel = gasto_hotel(dias)
gastos_gasolina = gasto_gasolina(distancia)
gastos_passeio = gasto_passeio(dias, custo)

print(f"Com base nos gastos definidos, uma viagem de {dias} dias para {cidade} saindo de Recife custaria {(gastos_hotel + gastos_gasolina + gastos_passeio):.2f} reais")
#10

def troca_pontuacao(frase : str) -> str:
  frase = frase.replace(',', ' ').replace('.', ' ').replace('!', ' ').replace('?', ' ')
  return frase

def filtra_palavras(frase : str) -> list:
    frase = troca_pontuacao(frase)
    palavras = frase.split()
    palavras_filtradas = list(filter(lambda x: len(x) >= 5, palavras)) # filtra somente todo cuja função tem resultado True
    return palavras_filtradas

frase = "Aprender Python aqui na Alura é muito bom"

palavras_filtradas = filtra_palavras(frase)
print(palavras_filtradas)
2 respostas
solução!

Olá, Marcelo! Tudo bem?

Parabéns pela resolução completa do desafio! É muito bom ver que você superou o problema do link quebrado que mencionou anteriormente e entregou um código de altíssimo nível. Com 10.9k de XP, sua maturidade técnica transparece na organização e no uso de recursos avançados do Python.

Aqui estão os pontos de destaque da sua implementação sob a ótica de Data Science:

1. Documentação e Tipagem

  • Docstrings: No exercício #3, você utilizou Docstrings para documentar a função mult_n. Isso é uma prática essencial em projetos de dados para que outros cientistas entendam rapidamente o que sua função faz.
  • Type Hints: Você aplicou dicas de tipo (ex: lista : list, -> list). Isso ajuda ferramentas de análise estática a identificar erros antes mesmo do código ser executado.

2. Programação Funcional

  • Map e Lambda: Nos exercícios #4 e #7, você demonstrou domínio sobre map e lambda. O uso de map com múltiplas listas no exercício #7 para formatar nomes e sobrenomes simultaneamente foi uma solução muito elegante.
  • Filter: No exercício #10, o uso de filter para selecionar palavras com 5 ou mais caracteres é a forma mais performática e "pythônica" de realizar filtragens em grandes volumes de texto.

3. Manipulação de Dados Complexos

  • Zip e Dicionários: No exercício #9, você utilizou zip para criar dicionários a partir de listas de cidades, distâncias e custos. Essa é uma técnica fundamental em engenharia de dados para correlacionar informações de diferentes fontes.
  • Lógica de Negócio: No exercício #5 (pontuação de manobra), a lógica de remover o valor máximo e mínimo antes de calcular a média é exatamente como funcionam julgamentos em esportes como skate ou ginástica, garantindo que "outliers" (notas fora da curva) não distorçam o resultado final.

Dica de Especialista:

No exercício #10, você criou uma função troca_pontuacao usando múltiplos .replace(). Para uma aplicação real com textos muito grandes, você poderia usar expressões regulares (**biblioteca re**) para remover todas as pontuações de uma só vez, o que deixaria o código ainda mais escalável:

import re
def troca_pontuacao(frase):
    return re.sub(r'[.,!?]', ' ', frase)

Excelente trabalho mantendo a consistência e a clareza em todos os 10 desafios!

Espero que possa ter lhe ajudado!

Agora que você dominou as funções e estruturas de dados, qual dessas ferramentas (map, filter ou lambda) você achou mais desafiadora de aplicar na lógica dos exercícios?

O mais desafiador foi entender alguns problemas rsrsrsrs e tentar simplificar a solução em overengineering, já que é só um exercício.