Introdução
Neste projeto, você aprenderá como construir uma calculadora de destino de viagem no tempo usando Python. Esta calculadora ajudará você a determinar as datas máxima no passado e no futuro que uma nave espacial de viagem no tempo pode alcançar, com base na data atual e no número estimado de dias que a nave espacial pode viajar.
👀 Pré-visualização
## Input:
## Output:
🎯 Tarefas
Neste projeto, você aprenderá:
- Como extrair informações de data de uma string fornecida
- Como calcular as datas no passado e no futuro com base no número de dias fornecido
- Como formatar as datas calculadas e retorná-las como uma lista de strings
🏆 Conquistas
Após concluir este projeto, você será capaz de:
- Entender como trabalhar com datas e
timedeltaem Python - Implementar uma função para calcular o destino da viagem no tempo
- Lidar com exceções e casos extremos em seu código
- Escrever código Python limpo e de fácil manutenção
Extrair Informações de Data
Nesta etapa, você aprenderá como extrair o ano, mês e dia da string de tempo de entrada.
- Abra o arquivo
time_travel_destination.pyem seu editor de código preferido. - Localize a função
time_travel_destination(time: str, days: int). - Dentro da função, adicione o seguinte código para extrair o ano, mês e dia do parâmetro
time:
try:
## Extract year, month, and day from the time string
year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
## ## If a ValueError or OverflowError occurs, return an empty list
## return []
Esta linha usa a função map() e o método split() para converter a string time em uma lista de inteiros representando o ano, mês e dia.
- Em seguida, você precisa verificar se a data extraída é válida. Você pode usar a função
datetime.date()para fazer isso:
## Extract year, month, and day from the time string
year, month, day = map(int, time.split("-"))
## Check if the date is valid
datetime.date(year, month, day)
Se a data for válida, esta linha não levantará nenhuma exceção. Se a data for inválida, um ValueError será levantado.
Calcular as Datas Passadas e Futuras
Nesta etapa, você aprenderá como calcular as datas no passado e no futuro com base no número de dias fornecido.
- Dentro da função
time_travel_destination(time: str, days: int), adicione o seguinte código para calcular as datas no passado e no futuro:
try:
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
past_time = datetime.date(1, 1, 1)
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
A variável past_time é calculada subtraindo o parâmetro days da data original. No entanto, se a data resultante for anterior à data mínima representável (1 de janeiro de 1 d.C.), um OverflowError será levantado. Neste caso, definimos past_time para a data mínima representável.
A variável future_time é calculada adicionando o parâmetro days à data original.
Formatar e Retornar os Resultados
Nesta etapa, você aprenderá como formatar as datas no passado e no futuro e retorná-las como uma lista de strings.
- Dentro da função
time_travel_destination(time: str, days: int), adicione o seguinte código para formatar as datas no passado e no futuro e retorná-las como uma lista:
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
O método strftime() é usado para formatar os objetos datetime.date past_time e future_time em strings no formato "dd-mm-yyyy".
- Finalmente, adicione um bloco de tratamento de exceção para capturar quaisquer exceções
ValueErrorouOverflowErrorque possam ocorrer durante a execução da função:
except (ValueError, OverflowError):
return []
Se alguma dessas exceções for levantada, a função retornará uma lista vazia.
Sua função final time_travel_destination(time: str, days: int) deve ser semelhante a esta:
import datetime
def time_travel_destination(time: str, days: int):
try:
## Extract year, month, and day from the time string
year, month, day = map(int, time.split("-"))
## Check if the date is valid
datetime.date(year, month, day)
try:
## Subtract the specified number of days from the given date
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
## If an OverflowError occurs, set past_time to the minimum representable date
past_time = datetime.date(1, 1, 1)
## Add the specified number of days to the given date
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
## Return the past and future dates in the format 'dd-mm-yyyy'
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
except (ValueError, OverflowError):
## If a ValueError or OverflowError occurs, return an empty list
return []
Você concluiu a implementação da função time_travel_destination(time: str, days: int). Você pode testar a função executando os exemplos fornecidos no bloco principal do arquivo time_travel_destination.py. Alguns exemplos são fornecidos abaixo:
- Entrada:
print(time_travel_destination('2238-2-11', 30))
print(time_travel_destination('2238-2-11', 0))
print(time_travel_destination('2238-2-11', 100))
- Saída:
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']
Resumo
Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.



