Faça uma função para ler os dados a partir dos arquivos indicados, com os números de observações diárias e mensais das manchas solares e armazená-los em dicionários diferentes, para cada ano, para cada tipo (diário ou mensal). As observações diárias serão armazenadas por mês, para cada ano.

Passo 1

Beleza, aqui a ideia é criar uma função em Python que leia dois arquivos – um com observações mensais de manchas solares e outro com observações diárias – e guarde tudo em dois dicionários bem organizadinhos. Cada dicionário vai ter como chave o ano, e dentro dele:
  • No dicionário “mensal”: mês → valor da observação mensal.
  • No dicionário “diário”: mês → lista com os valores diários daquele mês.
Conteúdo da matéria:
  • Leitura de arquivos em Python (open, for line in file)
  • Trabalhar com dicionários
  • Converter strings em inteiros (int())
  • Laços de repetição e condicionais
Vamos precisar entender como abrir arquivos, iterar linha a linha, dar um split() para quebrar em campos, converter tudo para número, e guardar nas estruturas.

Passo 2

Primeira coisa: criar a função e inicializar dois dicionários vazios:
def ler_dados(daily_file, monthly_file):
    dados_mensais = {}   # vai ficar {ano: {mes: valor_mensal, ...}, ...}
    dados_diarios = {}   # vai ficar {ano: {mes: [v1, v2, ...], ...}, ...}
    # vamos preencher esses dois e depois retornar

Passo 3

Lendo o arquivo mensal. Supondo que cada linha tenha “ano mês valor” separados por espaços e que a primeira linha seja cabeçalho:
    with open(monthly_file, 'r') as f_mes:
        next(f_mes)  # pula a primeira linha (cabeçalho)
        for line in f_mes:
            parts = line.strip().split()
            ano = int(parts[0])
            mes = int(parts[1])
            valor = int(parts[2])
            # se ainda não existe o ano no dicionário, criamos um dict vazio
            if ano not in dados_mensais:
                dados_mensais[ano] = {}
            # guardamos o valor do mês
            dados_mensais[ano][mes] = valor
Aqui usamos:
  • strip() para tirar espaços em branco no início/fim
  • split() para separar em lista de strings
  • int() para converter em número
  • if ano not in dict para inicializar o ano

Passo 4

Lendo o arquivo diário. Agora cada linha tem “ano mês dia valor”. Queremos guardar só o valor, agrupando por ano e por mês em listas:
    with open(daily_file, 'r') as f_dia:
        next(f_dia)  # pula o cabeçalho
        for line in f_dia:
            parts = line.strip().split()
            ano = int(parts[0])
            mes = int(parts[1])
            # dia = int(parts[2])  # não precisamos do dia pra indexar
            valor = int(parts[3])

            # inicializa ano e mês se não existirem
            if ano not in dados_diarios:
                dados_diarios[ano] = {}
            if mes not in dados_diarios[ano]:
                dados_diarios[ano][mes] = []
            # adiciona o valor na lista do mês
            dados_diarios[ano][mes].append(valor)
Passo a passo:
  1. Abrimos o arquivo diário.
  2. Pulamos cabeçalho.
  3. Para cada linha, extraímos ano, mês e valor.
  4. Garantimos que dados_diarios[ano] e dados_diarios[ano][mes] existam.
  5. Usamos .append() para enfileirar cada observação diária.

Passo 5

Por fim, só falta retornar os dois dicionários para quem chamou a função:
    return dados_diarios, dados_mensais

Resposta

def ler_dados(daily_file, monthly_file):
    """
    Lê dois arquivos com observações de manchas solares:
    - daily_file: ano mês dia valor
    - monthly_file: ano mês valor
    Retorna:
      dados_diarios, dados_mensais
    onde:
      dados_diarios = {ano: {mes: [valores_diários], ...}, ...}
      dados_mensais = {ano: {mes: valor_mensal, ...}, ...}
    """
    dados_mensais = {}
    dados_diarios = {}

    # Processa observações mensais
    with open(monthly_file, 'r') as f_mes:
        next(f_mes)  # pula cabeçalho
        for line in f_mes:
            parts = line.strip().split()
            ano = int(parts[0])
            mes = int(parts[1])
            valor = int(parts[2])
            if ano not in dados_mensais:
                dados_mensais[ano] = {}
            dados_mensais[ano][mes] = valor

    # Processa observações diárias
    with open(daily_file, 'r') as f_dia:
        next(f_dia)  # pula cabeçalho
        for line in f_dia:
            parts = line.strip().split()
            ano = int(parts[0])
            mes = int(parts[1])
            valor = int(parts[3])
            if ano not in dados_diarios:
                dados_diarios[ano] = {}
            if mes not in dados_diarios[ano]:
                dados_diarios[ano][mes] = []
            dados_diarios[ano][mes].append(valor)

    return dados_diarios, dados_mensais

Exercícios relacionados