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

Resolução - Hora da Prática - Seção 02

Bom dia!

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade
Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

2 respostas
solução!

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.

O detalhe oculto no Método 1 (Questão 5)

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].

  • O max(notas) é 8.
  • Quando o laço passar pelo primeiro 8, a condição vai ver que 8 != 8 é Falso. Ele não adiciona o número na soma.
  • Quando passar pelo segundo 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.

Por que o Método 2 é superior?

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.

Uma dica de otimização na Questão 3

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!