Calculadora de Destino de Viagem no Tempo

PythonBeginner
Pratique Agora

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 timedelta em 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.

  1. Abra o arquivo time_travel_destination.py em seu editor de código preferido.
  2. Localize a função time_travel_destination(time: str, days: int).
  3. 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.

  1. 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.

✨ Verificar Solução e Praticar

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.

  1. 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.

✨ Verificar Solução e Praticar

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.

  1. 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".

  1. Finalmente, adicione um bloco de tratamento de exceção para capturar quaisquer exceções ValueError ou OverflowError que 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']
✨ Verificar Solução e Praticar

Resumo

Parabéns! Você concluiu este projeto. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.