1
resposta

Desafio

1. Informações da lista

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

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

print("1)")
print(f"A lista possui {tam} números em que o maior número é {maior} e o menor número é {menor}.")
print(f"A soma dos valores presentes nela é igual a {soma}")
print("-" * 50)

2. Função da tabuada

def tabuada(numero):
print(f"Tabuada do {numero}:")

for i in range(11):
    print(f"{numero} x {i} = {numero * i}")

print("2)")
tabuada(7)
print("-" * 50)

3. Função que retorna múltiplos de 3

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

numeros = [97, 80, 94, 88, 80, 1, 16, 53, 62, 32, 24, 99]

mult_3 = multiplos_de_3(numeros)

print("3)")
print(mult_3)
print("-" * 50)

4. Quadrados usando lambda e map

numeros = [1,2,3,4,5,6,7,8,9,10]

quadrados = list(map(lambda x: x**2, numeros))

print("4)")
print(quadrados)
print("-" * 50)

5. Média eliminando maior e menor nota

print("5)")

notas = []

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

notas.remove(max(notas))
notas.remove(min(notas))

media = sum(notas) / len(notas)

print(f"Nota da manobra: {media:.2f}")
print("-" * 50)

6. Função de análise de notas

def analisa_notas(lista_notas):
maior = max(lista_notas)
menor = min(lista_notas)
media = sum(lista_notas) / len(lista_notas)

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

return maior, menor, media, situacao

print("6)")

notas_estudante = [7.5, 8.0, 6.5, 9.0]

maior, menor, media, situacao = analisa_notas(notas_estudante)

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}")
print("-" * 50)

7. Concatenar nomes e sobrenomes

print("7)")

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

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

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

print("-" * 50)

8. Cálculo da pontuação do time

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

max_pontos = len(gols_marcados) * 3

aproveitamento = (pontos / max_pontos) * 100

return pontos, aproveitamento

print("8)")

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:.1f}%")
print("-" * 50)

9. Gastos de viagem

def gasto_hotel(dias):
return dias * 150

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

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

print("9)")

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

total = (
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 R$ {total:.2f}")
print("-" * 50)

10. Filtrar palavras com 5 ou mais letras

print("10)")

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

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

palavras = frase.split()

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

print(resultado)

1 resposta

Olá, Micael. Como vai?

Parabéns pela resolução dos desafios! Você demonstrou um ótimo domínio das funções integradas do Python, como map, filter e zip, além de uma boa lógica na construção de funções personalizadas.

Vou comentar alguns pontos interessantes do seu código para agregar ainda mais valor aos seus estudos:

Uso de List Comprehension vs Map/Filter

No item 3, você usou List Comprehension, que é uma forma muito "pythonica" e performática de filtrar dados. Já no item 4 e 10, você optou por map e filter com lambda. Ambas as abordagens estão corretas, mas na comunidade Python, a List Comprehension costuma ser preferida por ser mais legível. Por exemplo, o item 10 poderia ser escrito assim:

resultado = [palavra for palavra in palavras if len(palavra) >= 5]

Tratamento de Strings

No item 7, o uso do método .title() foi uma excelente escolha para padronizar os nomes. Uma dica de boa prática: ao trabalhar com limpeza de textos (como você fez no item 10), se a lista de caracteres a remover for muito grande, você pode usar o módulo re (Expressões Regulares) para tornar o código mais limpo.

Atenção ao Item 5 (Média)

No seu código do item 5, há um detalhe importante sobre a lógica de remoção:

  • Ao usar notas.remove(max(notas)), o Python remove apenas a primeira ocorrência do maior valor. Se o usuário digitar duas notas iguais que sejam as maiores, apenas uma será removida.
  • Além disso, como você removeu os itens diretamente da lista original, o cálculo da média está correto pois o len(notas) também é atualizado. Só tenha cuidado ao usar o input dentro de loops em sistemas maiores, pois ele interrompe a execução para esperar o usuário.

Otimização com Zip

No item 8, o uso da função zip() foi perfeito para iterar sobre duas listas simultaneamente. Isso evita que você tenha que gerenciar índices manualmente (como gols_marcados[i]), o que reduz as chances de erros de "index out of range".

Boas Práticas em Funções

No item 6, você retornou múltiplos valores. Lembre-se que, no Python, quando retornamos valores separados por vírgula, estamos tecnicamente retornando uma tupla. Isso é muito útil para desempacotamento, como você fez em:
maior, menor, media, situacao = analisa_notas(notas_estudante).

Continue praticando, seus scripts estão muito bem estruturados e organizados!

Espero que possa ter lhe ajudado!