Faça funções Python para:
Determinar o ano e o mês que tiveram mais dias sem manchas solares.
Determinar o ano e o mês que tiveram mais dias sem manchas solares.
Passo 1
Beleza, então o problema é: “Criar funções em Python que consigam olhar um conjunto de dados diários de manchas solares e dizer qual ano e qual mês tiveram o maior número de dias sem mancha (ou seja, onde a contagem de manchas era zero).”
Conteúdo envolvido: estruturas de dados (listas, tuplas), dicionários para agrupar e contar, loops, funções em Python. Vamos precisar ler esses dados (supondo que já estão em memória como lista de tuplas), filtrar os dias com zero mancha, agrupar por ano e por mês e depois achar o máximo.
Conteúdo envolvido: estruturas de dados (listas, tuplas), dicionários para agrupar e contar, loops, funções em Python. Vamos precisar ler esses dados (supondo que já estão em memória como lista de tuplas), filtrar os dias com zero mancha, agrupar por ano e por mês e depois achar o máximo.
Passo 2
Primeiro, vamos supor que os dados venham numa lista chamada
dados
, onde cada item é uma tupla (ano, mes, dia, num_manchas)
. Algo como:dados = [
(2020, 1, 1, 5),
(2020, 1, 2, 0),
…
]
A ideia é criar um dicionário em que a chave seja o ano (ou o par ano-mês) e o valor seja a quantidade de dias sem manchas naquele agrupamento. Depois, a gente percorre esse dicionário e pega a chave com maior valor.
Passo 3
Função para achar o ano com mais dias sem manchas solares.
- Cria um dicionário
contagem_ano = {}
. - Percorre cada registro em
dados
. - Se
num_manchas == 0
, fazcontagem_ano[ano] = contagem_ano.get(ano, 0) + 1
. - Depois que o loop acabar, acha qual chave de
contagem_ano
tem o maior valor usandomax(contagem_ano, key=contagem_ano.get)
.
Em código:
def ano_com_mais_dias_sem_manchas(dados):
contagem_ano = {}
for ano, mes, dia, num_manchas in dados:
if num_manchas == 0:
contagem_ano[ano] = contagem_ano.get(ano, 0) + 1
# A função max com key=contagem_ano.get retorna o ano com maior valor no dicionário
return max(contagem_ano, key=contagem_ano.get)
Passo 4
Função para achar o mês (ano e mês) com mais dias sem manchas.
- Cria um dicionário
contagem_mes = {}
. - Para cada
(ano, mes, dia, num_manchas)
, senum_manchas == 0
, usa a tupla(ano, mes)
como chave:
contagem_mes[(ano, mes)] = contagem_mes.get((ano, mes), 0) + 1
. - No fim, retorna
max(contagem_mes, key=contagem_mes.get)
.
Em código:
def mes_com_mais_dias_sem_manchas(dados):
contagem_mes = {}
for ano, mes, dia, num_manchas in dados:
if num_manchas == 0:
chave = (ano, mes)
contagem_mes[chave] = contagem_mes.get(chave, 0) + 1
# Retorna uma tupla (ano, mes) com maior número de dias sem manchas
return max(contagem_mes, key=contagem_mes.get)
Resposta
Aqui estão as duas funções prontas:
def ano_com_mais_dias_sem_manchas(dados):
contagem_ano = {}
for ano, mes, dia, num_manchas in dados:
if num_manchas == 0:
contagem_ano[ano] = contagem_ano.get(ano, 0) + 1
return max(contagem_ano, key=contagem_ano.get)
def mes_com_mais_dias_sem_manchas(dados):
contagem_mes = {}
for ano, mes, dia, num_manchas in dados:
if num_manchas == 0:
chave = (ano, mes)
contagem_mes[chave] = contagem_mes.get(chave, 0) + 1
return max(contagem_mes, key=contagem_mes.get)
Basta chamar cada função passando sua lista de dados e elas devolvem, respectivamente, o ano e a tupla
(ano, mês)
com mais dias sem manchas solares.