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

[Projeto] Desafio: hora da prática

Eu não entendi direito o enunciado da atividade 14, espero que esteja certo, fui verificar a indicação da tutora e fiquei ainda mais confuso.

Uma equipe de cientistas de dados está estudando a diversidade biológica em uma floresta. A equipe fez a coleta de informações sobre o número de espécies de plantas e animais em cada área da floresta e armazenaram essas informações em um dicionário. Nele, a chave descreve a área dos dados e os valores nas listas correspondem às espécies de plantas e animais nas áreas, respectivamente.

estudo = {'Área Norte': [2819, 7236],
 'Área Leste': [1440, 9492],
 'Área Sul': [5969, 7496],
 'Área Oeste': [14446, 49688],
 'Área Centro': [22558, 45148]}

for item in estudo.items():
  print(f'A média de espécies por área é {round(sum(item[1]) / len(item[1]))} na área {item[0]}')
maior = max(estudo.items())
print(f'A área com a maior diversidade biológica é {maior[0]} com {round(sum(maior[1]) / len(maior[1]))}')
1 resposta

Ei! Tudo bem, Dannyel?

Entender a lógica por trás de problemas de ciência de dados e estruturas de dados em Python no começo pode parecer um desafio, mas você está no caminho certo e seu código trouxe ótimas ideias!O seu loop for para calcular a média por área funcionou muito bem!

Vamos ajustar o que acabou gerando a confusão no seu resultado.

Onde a sua lógica se distanciou do gabarito foi na hora de encontrar a maior diversidade biológica:

maior = max(estudo.items())

Quando você usa a função max() direto em estudo.items(), o Python não analisa a soma das espécies (os números dentro da lista). Ele vai analisar as chaves do dicionário em ordem alfabética. Por isso, o seu código apontará a "Área Sul" como a maior (já que 'S' vem depois de 'N', 'L', 'O' e 'C'), o que está incorreto matematicamente, pois a Área Centro e a Área Oeste possuem muito mais espécies.

Para descobrir qual área tem a maior diversidade, precisamos somar os valores de cada lista e comparar quem tem o maior total. A tutora fez isso criando uma estrutura de comparação (if soma_especies > maior_soma) dentro do loop, atualizando a área vencedora à medida que o código lê o dicionário.

Organizando seu código com essa lógica, ele ficaria assim:

estudo = {
    'Área Norte': [2819, 7236],
    'Área Leste': [1440, 9492],
    'Área Sul': [5969, 7496],
    'Área Oeste': [14446, 49688],
    'Área Centro': [22558, 45148]
}

maior_soma = 0
area_maior_diversidade = ""

for area, especies in estudo.items():
    # Calcula a média da área atual
    media = sum(especies) / len(especies)
    print(f'A média de espécies na {area} é {round(media)}')
    
    # Verifica se esta área tem a maior soma até agora
    if sum(especies) > maior_soma:
        maior_soma = sum(especies)
        area_maior_diversidade = area

print(f'\nA área com a maior diversidade biológica é {area_maior_diversidade} com um total de {maior_soma} espécies.')

Deixo aqui o link do notebook usado para teste: https://colab.research.google.com/drive/1iazKSvDLesUM6lOAb5Kq7VQLM4whQLgC?usp=sharing

Espero ter ajudado e qualquer dúvida, conte conosco.

Bons estudos e até mais!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado