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.
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.
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:
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)
:- Testamos
if y == ano
(filtra só o ano que queremos) - Dentro disso,
if n == 0
(dia sem manchas) - Se ambas forem verdade, fazemos
meses_sem_manchas[m] += 1
para incrementar o contador do mêsm
.
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