Faça funções Python para:
Calcular a média mensal de cada mês, para um dado ano.

Passo 1

Beleza, aqui o enunciado diz “Faça funções Python para calcular a média mensal de cada mês, para um dado ano.”
Isso é conteúdo de Python básico: vamos criar uma função que receba um ano e uma lista de dados (data + valor) e devolva, pra cada mês desse ano, a média dos valores.
O que precisamos:
  • Dicionário para agrupar valores por mês
  • Laços de repetição (for)
  • Módulo datetime (ou datas em formato simples)
  • Cálculo de média: bar x = sumi=1^n xin

Passo 2

Primeiro, vamos preparar um dicionário que tenha uma chave para cada mês (1 a 12) e uma lista vazia pra acumular valores:
from datetime import datetime

def media_mensal(ano, dados):
    # dados é uma lista de tuplas (string_data, valor) ou (datetime, valor)
    meses = {m: [] for m in range(1, 13)}

Passo 3

Agora, percorremos cada registro, transformamos a data em objeto datetime (se for string), verificamos se pertence ao ano pedido e colocamos o valor na lista correta:
    for data, valor in dados:
        # se vier como string, converte. Ex: "2023-04-15"
        if isinstance(data, str):
            data = datetime.fromisoformat(data)
        if data.year == ano:
            meses[data.month].append(valor)

Passo 4

Com tudo agrupado, basta calcular a média de cada lista. Se não tiver valor no mês, a gente pode usar None ou zero, conforme preferir. Vamos usar None:
    medias = {}
    for mes, lista_valores in meses.items():
        if lista_valores:
            soma = sum(lista_valores)
            n = len(lista_valores)
            medias[mes] = soma / n  # aplica bar{x} = sum(x_i)/n
        else:
            medias[mes] = None
    return medias

Passo 5

meses = {m: [] for m in range(1, 13)}

Passo 6

for data, valor in dados:
if isinstance(data, str):
data = datetime.fromisoformat(data)
if data.year == ano:
meses[data.month].append(valor)

Passo 7

medias = {}
for mes, lista_valores in meses.items():
if lista_valores:
medias[mes] = sum(lista_valores) / len(lista_valores)
else:
medias[mes] = None
return medias

Exemplo de uso:  
```python
dados_ex = [
    ("2023-01-10", 10),
    ("2023-01-20", 20),
    ("2023-02-05", 30),
    ("2022-01-15", 50),
]
print(media_mensal(2023, dados_ex))
# Saída: {1: 15.0, 2: 30.0, 3: None, ..., 12: None}

Resposta

from datetime import datetime

def media_mensal(ano, dados):
    """
    Calcula a média mensal de cada mês para um ano dado.

    Parâmetros:
    - ano: int, ano que queremos filtrar.
    - dados: lista de tuplas (data, valor). Data pode ser datetime ou string "YYYY-MM-DD".

    Retorna:
    - dict onde a chave é o mês (1 a 12) e o valor é a média ou None se não houver dados.
    """

Exercícios relacionados