Atenção: Esta tarefa também será corrigida manualmente. Depois de terminada e corrigida automaticamente, você deve apresentar sua tarefa a um monitor em algum horário de atendimento. Você poderá pedir recorreção, mas o conceito da recorreção será no máximo B.
Agenda
Nesta tarefa você deve implementar um aplicativo de agenda em modo texto. O usuário do aplicativo pode criar um evento, alterar as informações de um evento, remover um evento e listar todos os eventos de um dia. As informações que um evento tem são: identificador, nome, descrição, data e hora.
Argumentos por linha de comando
A interação do usuário será feita passando argumentos pela linha de
comando. Quando executamos um processo no sistema operacional, além do
nome do programa, passamos algumas informações adicionais, como
variáveis de ambiente e argumentos. Para acessar os argumentos em
Python, podemos acessar a variável sys.argv
, que é uma lista de
strings com os argumentos. Por exemplo, o programa argumentos.py
a
seguir lista todos os argumentos passados na chamada.
import sys def main(): for i, argumento in enumerate(sys.argv): print(f"Argumento {i}: {argumento}") main()
Uma execução possível é a seguinte.
user@notebook$ python3 argumentos.py argumento outro "argumento com espaços" -o Argumento 0: argumentos.py Argumento 1: argumento Argumento 2: outro Argumento 3: argumento com espaços Argumento 4: -o
Os argumentos são úteis quando um programa puder executar uma série de
atividades diferentes: assim como uma função recebe parâmetros, um
programa pode receber argumentos e opções. Na prática, utilizamos um
módulo que facilita o uso de argumentos. Por exemplo, podemos utilizar
o argparse
.
O argparse
é um módulo da biblioteca padrão do Python que ajuda com
a criação de interfaces de linha de comando amigáveis. Nós definimos os
argumentos esperados e como eles devem ser formatados e deixamos que o
argparse
os trate fazendo todas as verificações necessárias.
A seguir, vamos ver um exemplo no qual temos um programa que calcula o logaritmo de um número. O usuário pode escolher a base, mas se não informar nenhuma, o programa deve utilizar a base 10.
Primeiro, precisamos definir um parser.
parser = argparse.ArgumentParser()
Em seguida, definimos cada um dos argumentos esperados. Abaixo,
estamos definindo um argumento de posição chamado numero
e um
argumento opcional chamado base
. Caso um valor para o segundo
argumento não seja informado, ele receberá o valor padrão de 10.0
.
parser.add_argument("numero", help="número para calcular o logaritmo.", type=float) parser.add_argument("-b", "--base", help="base do logaritmo.", default=10.0, type=float)
Após definir os argumentos, transformamos os argumentos de acordo com o parser.
args = parser.parse_args()
Podemos então pegar os valores dos argumentos da seguinte forma:
resultado = math.log(args.numero, args.base)
Para o usuário ver a lista de parâmEtros e suas descrições, ele deve
executar o programa com o parâmetro -h
ou --help
.
user@notebook$ python3 logaritmo.py -h
Para calcular o logaritmo do número 16 na base 2:
user@notebook$ python3 logaritmo.py 16 -b 2
Persistência de dados
Os eventos da agenda que esta tarefa manipulará devem ser guardados em
um arquivo texto no formato
CSV, de forma
que as informações sejam persistentes entre as várias vezes que
executamos o programa. Quando o usuário desejar realizar alguma
operação sobre sua agenda, ele irá executar o aplicativo passando uma
opção -a
com o nome do arquivo CSV da agenda e passando como
argumento do programa a ação correspondente para a agenda,
inicializar
, criar
, alterar
, remover
ou listar
.
Por exemplo, para inicializar uma nova agenda vazia, pode-se digitar
user@notebook$ python3 agenda.py -a agenda.csv inicializar Uma agenda vazia `agenda.csv` foi criada!
O programa mostrará uma mensagem informando que a ação foi realizada.
Com exceção da ação listar
, você pode escolher a mensagem para o
usuário que melhor entender. Para a ação listar
, a saída deve ser
compatível com os exemplos dos casos de teste.
Operações sobre a agenda
As operações sobre uma agenda existente são descritas a seguir.
Criar evento
Para criar um evento, o usuário irá executar o programa passando como argumento as informações do evento que deseja criar.
Um exemplo de uso:
user@notebook$ python3 agenda.py -a agenda.csv criar --nome "MC102" --descricao "Aula de laboratório" --data "01/06/2020" --hora "14:00" Foi adicionado evento 3.
O identificador do evento é um número inteiro. Esse número é determinado pela seguinte regra. Se a agenda estiver vazia, então o evento criado terá identificador 1. Se não, então o identificador do novo evento será o maior identificador armazenado na agenda mais um.
Alterar evento
O usuário pode alterar informações de eventos criados. Para isso, ele informará por argumento qual evento e qual informação deja alterar.
Exemplo de uso:
user@notebook$ python3 agenda.py -a agenda.csv alterar --evento 1 --hora "16:00" Alguma mensagem de retorno para o usuário.
Remover evento
Para remover um evento, o usuário deve informar qual evento deve ser removido.
Exemplo de uso:
user@notebook$ python3 agenda.py -a agenda.csv remover --evento 1 Alguma mensagem de retorno para o usuário.
Listar eventos
O usuário pode listar todos os eventos de um dia, para isso deve executar o programa informando por argumento a data. Os eventos são apresentados na ordem de criação.
Exemplo de uso:
user@notebook$ python3 agenda.py -a agenda.csv listar --data "13/06/2020" Eventos do dia 13/06/2020 ----------------------------------------------- Evento 1 - MC102 Descrição: Aula de laboratório Data: 01/06/2020 Hora: 16:50 -----------------------------------------------
Se não houver eventos no dia, então deve ser mostrada uma mensagem informando isso.
user@notebook$ python3 agenda.py -a agenda.csv listar --data "13/06/2020" Não existem eventos para o dia 13/06/2020!
Documentação
Além de escrever um programa, você deverá criar um arquivo README.md
documentando o seu programa. Nesse arquivo, você deverá descrever
sucintamente (no mínimo 300 palavras e no máximo 500 palavras).
-
O formato do seu arquivo CSV. Você deve deixar claro quais colunas o arquivo tem, se há cabeçalho e nomes, tipo de separadores, etc.
-
A estrutura de dados que representa a agenda. Você deve explicar qual estrutura escolhida para representar a coleção de eventos e quais são os dados que representam um dado evento.