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!

1
resposta

Desafio: hora da prática

1 - lista = [16, 14, 63, 65, 17, 99, 70, 11, 20, 48, 79, 32, 17, 89, 12, 25, 66]

def analisar_lista(lista):
tam = len(lista)
maior = max(lista)
menor = min(lista)
soma = sum(lista)

return 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}"

print(analisar_lista(lista))

2- def tabuada(numero):
print(f"Tabuada do {numero}:")
for i in range(11):
print(f"{numero} x {i} = {numero * i}")

tabuada(7)

3- lista = [97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99]

def multiplos_de_3(lista):
return [num for num in lista if num % 3 == 0]

mult_3 = multiplos_de_3(lista)

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 nota_manobra(notas):
notas.remove(max(notas))
notas.remove(min(notas))
media = sum(notas) / len(notas)
return media

notas = [8.5, 9.0, 7.5, 10.0, 8.0]

media = nota_manobra(notas)

print(f"Nota da manobra: {media}")

6- def analisar_notas(notas):
maior = max(notas)
menor = min(notas)
media = sum(notas) / len(notas)

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

return maior, menor, media, situacao

notas = [8, 7, 9, 6]

maior, menor, media, situacao = analisar_notas(notas)

print(f"O(a) estudante obteve uma média de {media:.1f}, com a sua maior nota de {maior} pontos e a menor nota de {menor} pontos e foi {situacao}")

7 - nomes = ["joão", "MaRia", "JOSÉ"]
sobrenomes = ["SILVA", "souza", "Tavares"]

nomes_completos = list(
map(lambda n, s: f"{n.title()} {s.title()}",
nomes,
sobrenomes)
)

for nome in nomes_completos:
print(f"Nome completo: {nome}")

8 - def calcula_pontos(gols_marcados, gols_sofridos):
pontos = 0

for marcados, sofridos in zip(gols_marcados, gols_sofridos):
    if marcados > sofridos:
        pontos += 3
    elif marcados == sofridos:
        pontos += 1

maximo = len(gols_marcados) * 3
aproveitamento = (pontos / maximo) * 100

return pontos, aproveitamento

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

pontos, aprov = calcula_pontos(gols_marcados, gols_sofridos)

print(f"A pontuação do time foi de {pontos} e seu aproveitamento foi de {aprov:.2f}%")

9 - def gasto_hotel(dias):
return dias * 150

def gasto_gasolina(distancia):
return (distancia * 2 / 14) * 5

def gasto_passeio(dias, valor_passeio):
return dias * valor_passeio

cidade = "Salvador"
dias = 3
distancia = 850
valor_passeio = 200

gastos = (
gasto_hotel(dias)
+ gasto_gasolina(distancia)
+ gasto_passeio(dias, valor_passeio)
)

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

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

frase = frase.replace(",", " ")
frase = frase.replace(".", " ")
frase = frase.replace("!", " ")
frase = frase.replace("?", " ")

palavras = frase.split()

resultado = list(filter(lambda p: len(p) >= 5, palavras))

print(resultado)

1 resposta

Olá, Rúbia. Como vai?

Parabéns pela resolução do desafio! Você resolveu com maestria todos os 10 exercícios da lista prática. Seu código está muito limpo, bem estruturado e você aplicou de forma excelente recursos avançados do Python, como List Comprehensions, a função map(), a função zip(), expressões lambdas e f-strings para formatação de casas decimais (como o {aprov:.2f}%).

Como você compartilhou um gabarito brilhante para a atividade, vou destacar alguns pontos de destaque e trazer pequenas dicas de boas práticas que tornam o seu código ainda mais robusto e idiomático (o famoso estilo pythônico):

Destaques Positivos do Seu Código

  • Uso Elegante do zip() (Exercício 8): A forma como você combinou as listas de gols marcados e sofridos usando o zip() ficou impecável. Essa é a maneira mais eficiente em Python de iterar por duas listas paralelas ao mesmo tempo sem precisar usar índices numéricos.
  • Desempacotamento de Tuplas (Exercício 6): No exercício das notas, ao fazer return maior, menor, media, situacao, sua função retornou uma tupla. Na hora de chamar a função, você fez o desempacotamento direto nas variáveis maior, menor, media, situacao = analisar_notas(notas). Isso é uma excelente prática de legibilidade!
  • A função map() com Múltiplos Argumentos (Exercício 7): Poucas pessoas sabem que a função map() pode aceitar duas ou mais listas simultaneamente se a função interna (ou a lambda) receber o mesmo número de parâmetros. Você aplicou isso perfeitamente unindo nomes e sobrenomes em conjunto com o método .title().

Pequenas Sugestões de Boas Práticas

No Exercício 5 (Nota da Manobra): Mutabilidade de Listas

No seu código, você usou notas.remove(max(notas)). O método .remove() altera a lista original que foi passada para a função. Se em alguma outra parte do seu programa principal você precisasse usar a lista notas original com todos os 5 elementos, ela estaria modificada (com apenas 3 elementos).

Para evitar esse "efeito colateral", uma boa prática é criar uma cópia da lista dentro da função antes de remover os valores, ou usar funções que não alteram o objeto original:

def nota_manobra(lista_notas):
    # Faz uma cópia para proteger a lista original de fora da função
    notas_copia = lista_notas.copy()
    notas_copia.remove(max(notas_copia))
    notas_copia.remove(min(notas_copia))
    return sum(notas_copia) / len(notas_copia)

No Exercício 10 (Tratamento de Strings): Otimizando com Loops

Você fez um ótimo trabalho limpando a pontuação da frase antes de usar o .split(). Uma dica para deixar o código mais enxuto quando temos muitos caracteres para remover é usar um pequeno laço for:

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

# Substitui todos os caracteres da string de uma só vez
for caractere in ",.!?":
    frase = frase.replace(caractere, " ")

palavras = frase.split()
resultado = list(filter(lambda p: len(p) >= 5, palavras))

Seus resultados estão 100% corretos e demonstram que você dominou completamente a lógica de funções, escopo e manipulação de coleções no Python. Continue com esse ótimo ritmo de estudos!

Espero que possa ter lhe ajudado!