Faça funções Python para:
Contar os dias em que não foram observadas manchas solares em cada mês, para um dado ano.

Passo 1

Beleza! O enunciado pede pra gente criar uma função em Python que, dado um ano e uma lista de registros diários de manchas solares, conte quantos dias em cada mês não apareceram manchas (ou seja, manchas = 0).
Conteúdo: Python básico (listas, tuplas, dicionários, laços de repetição e condicionais). Vamos precisar entender como andar por uma lista de tuplas, testar condições e atualizar valores num dicionário.

Passo 2

Primeiro, vamos definir como chegam os dados na nossa função. Uma forma simples é usar uma lista de tuplas, onde cada tupla é (ano, mês, dia, n_manchas). Por exemplo:
dados = [
  (2020, 1, 1,  0),
  (2020, 1, 2, 10),
  (2020, 2, 1,  0),
  …
]
A função vai receber essa lista e o ano que queremos filtrar.

Passo 3

A gente precisa de um lugar para guardar o resultado: quantos dias sem manchas em cada mês.
Em Python, um dicionário é ótimo pra isso. Vamos criar um dicionário com chaves de 1 a 12 (os meses) e valor inicial zero:
meses_sem_manchas = {m: 0 for m in range(1, 13)}
Aqui usamos compreensão de dicionário, mas se não souber, dá pra fazer com um laço normal:
meses_sem_manchas = {}
for m in range(1, 13):
    meses_sem_manchas[m] = 0

Passo 4

Agora vamos percorrer cada registro na lista dados. Pra cada tupla (y, m, d, n):
  1. Testamos if y == ano (filtra só o ano que queremos)
  2. Dentro disso, if n == 0 (dia sem manchas)
  3. Se ambas forem verdade, fazemos meses_sem_manchas[m] += 1 para incrementar o contador do mês m.
    Isso usa estruturas de repetição (for) e condicionais (if), bem didático.

Passo 5

Depois de rodar todo o laço, o dicionário meses_sem_manchas já vai ter, em cada mês, o total de dias sem manchas. Aí é só retornar esse dicionário.

Resposta

def contar_dias_sem_manchas(dados, ano):
    """
    dados: lista de tuplas (ano, mês, dia, n_manchas)
    ano: inteiro, ano que queremos filtrar
    retorna: dicionário {mês: dias_sem_manchas}
    """
    # Inicializa o dicionário com zero para cada mês
    meses_sem_manchas = {m: 0 for m in range(1, 13)}
    
    # Percorre cada registro
    for (y, m, d, n) in dados:
        # Se for o ano desejado e não houve manchas (n == 0), incrementa
        if y == ano and n == 0:
            meses_sem_manchas[m] += 1
    
    return meses_sem_manchas

Exercícios relacionados