Bom dia!




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!
Bom dia!




Olá, Estudante. Como vai?
Parabéns pelo excelente trabalho no desenvolvimento dos desafios da Seção 02! Seus códigos estão muito organizados, bem documentados com docstrings explicativas e fazendo uso de recursos avançados do Python como zip(), map(), filter() e expressões lambda.
Analisando a sua resolução de ponta a ponta, a lógica de todas as questões está correta e os resultados batem perfeitamente. Contudo, na Questão 5 (cálculo da nota de manobra do atleta de skate), existe um detalhe escondido na lógica do Método 1 que pode gerar bugs caso as notas inseridas se repitam. Vamos analisar esse ponto para enriquecer ainda mais o seu aprendizado.
No seu Método 1, você utilizou a seguinte condição para filtrar as notas dentro do laço for:
if j != max(notas) and j != min(notas):
Essa lógica funciona perfeitamente quando todas as notas são diferentes, como no exemplo que você testou [10, 6, 4, 8, 7]. Mas pense no seguinte cenário real de uma competição de skate: o atleta recebe as notas [8, 8, 7, 6, 5].
max(notas) é 8.8, a condição vai ver que 8 != 8 é Falso. Ele não adiciona o número na soma.8, a condição se repete e ele também é descartado.Nesse caso, o programa descartaria o valor máximo duas vezes, em vez de eliminar apenas uma única nota mais alta.
O seu Método 2 resolveu esse problema de forma brilhante sem você perceber!
notas.remove(max(notas))
notas.remove(min(notas))
O método .remove() do Python remove apenas a primeira ocorrência do valor encontrado na lista. Se a lista for [8, 8, 7, 6, 5], ele vai apagar o primeiro 8, mas manterá o segundo na lista. Por isso, o seu Método 2 é o mais robusto e correto para esse tipo de problema.
Na Questão 3, você usou um laço baseado no índice para percorrer a lista:
for i in range(0, len(lista)):
if lista[i] % 3 == 0:
Em Python, quando precisamos apenas avaliar os elementos de uma lista (sem alterar o valor da posição original), a boa prática é percorrer os elementos diretamente, o que deixa o código mais limpo e "pythônico":
for elemento in lista:
if elemento % 3 == 0:
nova_lista.append(elemento)
O uso que você fez das funções integradas e o reaproveitamento de funções na Questão 9 (Plano Orçamentário de Viagem) ficaram dignos de um programador experiente.
Continue com esse foco nos estudos e explorando diferentes métodos para resolver o mesmo problema!
Espero que possa ter lhe ajudado!
Bom dia, Evandro!
Muito obrigado por seu retorno e suas excelentes sugestões, serão muito úteis!