<jupyter_start><jupyter_text>Introdução a Python -  Oficina Aula 3.1Chegou o momento de você colocar em prática tudo o que aprendeu sobre dividir e reutilizar códigos. Para isso, imagine um programa de agenda, que utiliza uma lista para armazenar os eventos inseridos por um usuário, cuja uma de suas finalidades é imprimir uma lista dos eventos que acontecerão entre duas datas especificadas também pelo usuário. Os eventos são representados por tuplas, em que:* O primeiro elemento é uma tupla de três números: ano, mês e dia;* O segundo elemento é uma tupla de dois números: hora e minuto e;* O terceiro elemento é uma string que descreve brevemente o evento.Um exemplo dos dados desta agenda é representado pelo trecho abaixo:```pythonagenda = [      ((2020, 1, 13), (11, 50), 'Renovar identidade'),      ((2020, 1, 15), (16, 30), 'Fazer compras'),      ((2020, 1, 25), (8, 45), 'Autenticar documentos'),      ((2020, 2, 29), (14, 15), 'Prestar concurso'),      ((2020, 3, 15), (17, 50), 'Buscar bolo pro aniversário da vovó'),      ((2020, 3, 17), (13, 20), 'Consulta de revisão com dentista'),]```Você deve completar a função imprimir_eventos, rascunhada abaixo, que recebe como parâmetros uma lista de eventos neste formato e dois parâmetros adicionais, de_data e ate_data, que dão as datas inicial e final:```pythondef imprimir_eventos(eventos, de_data=(1, 1, 1), ate_data=(9999, 12, 31)):```Os valores padrão das datas indicam que o comportamento padrão é imprimir todos os eventos. É possível restringir a data inicial, a data final, ou ambas, usando estes parâmetros. Por exemplo, o resultado da chamada imprimir_eventos(agenda, (2020, 1, 20)) é a impressão do seguinte trecho:```python25/jan/2020 - 08:45: Autenticar documentos29/fev/2020 - 14:15: Prestar concurso15/mar/2020 - 17:50: Buscar bolo pro aniversário da vovó17/mar/2020 - 13:20: Consulta de revisão com dentista```e o resultado da chamada imprimir_eventos(agenda, ate_data=(2020, 3, 15)) é a impressão de:```python13/jan/2020 - 11:50: Renovar identidade15/jan/2020 - 16:30: Fazer compras25/jan/2020 - 08:45: Autenticar documentos29/fev/2020 - 14:15: Prestar concurso15/mar/2020 - 17:50: Buscar bolo pro aniversário da vovó```Para te auxiliar na conclusão deste problema, você deve criar também duas funções adicionais:* formatar_data, que recebe uma tupla de números na forma (ano, mes, dia) e retorna uma string na forma dd/mes/aaaa, substituindo o mês pelas três letras iniciais do nome do mês, por extenso. Por exemplo, formatar_data((2020, 1, 3)) deve retornar "03/jan/2020".* formatar_hora, que recebe uma tupla de números na forma (hora, minuto) e retorna uma string na forma hh:mm em formato de 24h. Por exemplo, formatar_hora((16, 30)) deve retornar "16:30"Então agora é o momento de você unir todas essas informações ao que você já sabe sobre funções para completar o programa de acordo com as orientações passadas. Boa prática!<jupyter_code>agenda = [
    ((2020, 1, 13), (11, 50), 'Renovar identidade'),
    ((2020, 1, 15), (16, 30), 'Fazer compras'),
    ((2020, 1, 25), (8, 45), 'Autenticar documentos'),
    ((2020, 2, 29), (14, 15), 'Prestar concurso'),
    ((2020, 3, 15), (17, 50), 'Buscar bolo pro aniversário da vovó'),
    ((2020, 3, 17), (13, 20), 'Consulta de revisão com dentista'),
] 
#Desempacotando agenda
a, b, c, d, e, f = agenda
a1, a2, a3 = a
b1, b2, b3 = b
c1, c2, c3 = c
d1, d2, d3 = d
e1, e2, e3 = e
f1, f2, f3 = f

#Convertendo as tuplas em listas
a1 = list(a1)
a2 = list(a2)
b1 = list(b1)
b2 = list(b2)
c1 = list(c1)
c2 = list(c2)
d1 = list(d1)
d2 = list(d2)
e1 = list(e1)
e2 = list(e2)
f1 = list(f1)
f2 = list(f2)

#Convertendo as listas com int em string
a1 = "/".join(map(str, a1))
a2 = ":".join(map(str, a2))
b1 = "/".join(map(str, b1))
b2 = ":".join(map(str, b2))
c1 = "/".join(map(str, c1))
c2 = ":".join(map(str, c2))
d1 = "/".join(map(str, d1))
d2 = ":".join(map(str, d2))
e1 = "/".join(map(str, e1))
e2 = ":".join(map(str, e2))
f1 = "/".join(map(str, f1))
f2 = ":".join(map(str, f2))
#Aplicando uma função
def imprimir_eventos(eventos, de_data=(1, 1, 1), ate_data=(9999, 12, 31)):
    pass
#Criando uma tabela a partir das variáveis
import pandas as pd
agenda = {'datas': [a1, b1, c1, d1, e1, f1], 'horários': [a2, b2, c2, d2, e2, f2], 'eventos': [a3, b3, c3, d3, e3, f3]}
aux = pd.DataFrame(agenda, columns = ['datas','horários', 'eventos'])
print(aux)<jupyter_output>datas horários                              eventos
0  2020/1/13    11:50                   Renovar identidade
1  2020/1/15    16:30                        Fazer compras
2  2020/1/25     8:45                Autenticar documentos
3  2020/2/29    14:15                     Prestar concurso
4  2020/3/15    17:50  Buscar bolo pro aniversário da vovó
5  2020/3/17    13:20     Consulta de revisão com dentista
{'fraction_non_alphanumeric': 0.13084307178631052, 'fraction_numerical': 0.0907762938230384, 'mean_word_length': 3.936148300720906, 'pattern_counts': {'":': 6, '<': 4, '<?xml version=': 0, '>': 4, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 3, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '607252', 'license': 'MIT', 'n_tokens_mistral': 2139, 'n_tokens_neox': 1830, 'n_words': 652, 'path': 'Introducao_a_Python/Oficina 3.1_PAB.ipynb', 'repo_name': 'pamellabiotec/pjcd', 'size': '4792'}