Faça funções Python para:
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.

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.
  1. Cria um dicionário contagem_ano = {}.
  2. Percorre cada registro em dados.
  3. Se num_manchas == 0, faz contagem_ano[ano] = contagem_ano.get(ano, 0) + 1.
  4. Depois que o loop acabar, acha qual chave de contagem_ano tem o maior valor usando max(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.
  1. Cria um dicionário contagem_mes = {}.
  2. Para cada (ano, mes, dia, num_manchas), se num_manchas == 0, usa a tupla (ano, mes) como chave:
    contagem_mes[(ano, mes)] = contagem_mes.get((ano, mes), 0) + 1.
  3. 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.

Exercícios relacionados