Calculadora de destino del viaje en el tiempo

PythonBeginner
Practicar Ahora

Introducción

En este proyecto, aprenderás a construir una calculadora de destinos de viajes al tiempo utilizando Python. Esta calculadora te ayudará a determinar las fechas máximas del pasado y del futuro a las que puede llegar una nave espacial de viajes al tiempo, basándose en la fecha actual y la cantidad estimada de días que puede viajar la nave.

👀 Vista previa

## Entrada:

## Salida:

🎯 Tareas

En este proyecto, aprenderás:

  • Cómo extraer información de fecha de una cadena dada
  • Cómo calcular las fechas del pasado y del futuro basadas en la cantidad dada de días
  • Cómo formatear las fechas calculadas y devolverlas como una lista de cadenas

🏆 Logros

Después de completar este proyecto, podrás:

  • Comprender cómo trabajar con fechas y timedelta en Python
  • Implementar una función para calcular el destino del viaje al tiempo
  • Manejar excepciones y casos límite en tu código
  • Escribir código Python limpio y mantenible

Extraer información de la fecha

En este paso, aprenderás a extraer el año, el mes y el día de la cadena de tiempo de entrada.

  1. Abra el archivo time_travel_destination.py en su editor de código preferido.
  2. Localice la función time_travel_destination(time: str, days: int).
  3. Dentro de la función, agregue el siguiente código para extraer el año, el mes y el día del parámetro time:
try:
    ## Extraer año, mes y día de la cadena de tiempo
    year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
##     ## Si se produce un ValueError o OverflowError, devolver una lista vacía
##     return []

Esta línea utiliza la función map() y el método split() para convertir la cadena time en una lista de enteros que representan el año, el mes y el día.

  1. A continuación, debe comprobar si la fecha extraída es válida. Puede utilizar la función datetime.date() para hacer esto:
## Extraer año, mes y día de la cadena de tiempo
year, month, day = map(int, time.split("-"))
## Comprobar si la fecha es válida
datetime.date(year, month, day)

Si la fecha es válida, esta línea no generará ninguna excepción. Si la fecha es inválida, se generará un ValueError.

✨ Revisar Solución y Practicar

Calcular las fechas del pasado y del futuro

En este paso, aprenderás a calcular las fechas del pasado y del futuro basadas en la cantidad dada de días.

  1. Dentro de la función time_travel_destination(time: str, days: int), agregue el siguiente código para calcular las fechas del pasado y del 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)

La variable past_time se calcula restando el parámetro days a la fecha original. Sin embargo, si la fecha resultante es anterior a la fecha mínima representable (1 de enero de 1 d.C.), se generará un OverflowError. En este caso, establecemos past_time en la fecha mínima representable.

La variable future_time se calcula sumando el parámetro days a la fecha original.

✨ Revisar Solución y Practicar

Formatear y devolver los resultados

En este paso, aprenderás a formatear las fechas del pasado y del futuro y a devolverlas como una lista de cadenas.

  1. Dentro de la función time_travel_destination(time: str, days: int), agregue el siguiente código para formatear las fechas del pasado y del futuro y devolverlas como una lista:
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]

El método strftime() se utiliza para formatear los objetos datetime.date de past_time y future_time en cadenas con el formato "dd-mm-yyyy".

  1. Finalmente, agregue un bloque de manejo de excepciones para capturar cualquier excepción ValueError o OverflowError que pueda ocurrir durante la ejecución de la función:
except (ValueError, OverflowError):
    return []

Si se produce alguna de estas excepciones, la función devolverá una lista vacía.

Su función time_travel_destination(time: str, days: int) final debería verse así:

import datetime

def time_travel_destination(time: str, days: int):
    try:
        ## Extraer año, mes y día de la cadena de tiempo
        year, month, day = map(int, time.split("-"))
        ## Comprobar si la fecha es válida
        datetime.date(year, month, day)
        try:
            ## Restar el número especificado de días a la fecha dada
            past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
        except OverflowError:
            ## Si se produce un OverflowError, establecer past_time en la fecha mínima representable
            past_time = datetime.date(1, 1, 1)
        ## Sumar el número especificado de días a la fecha dada
        future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
        ## Devolver las fechas del pasado y del futuro en el formato 'dd-mm-yyyy'
        return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
    except (ValueError, OverflowError):
        ## Si se produce un ValueError o OverflowError, devolver una lista vacía
        return []

Ya has completado la implementación de la función time_travel_destination(time: str, days: int). Puedes probar la función ejecutando los ejemplos proporcionados en el bloque principal del archivo time_travel_destination.py. A continuación se proporcionan algunos ejemplos:

  • 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))
  • Salida:
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']
✨ Revisar Solución y Practicar

Resumen

¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.