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.
- Abra el archivo
time_travel_destination.pyen su editor de código preferido. - Localice la función
time_travel_destination(time: str, days: int). - 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.
- 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.
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.
- 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.
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.
- 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".
- Finalmente, agregue un bloque de manejo de excepciones para capturar cualquier excepción
ValueErroroOverflowErrorque 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']
Resumen
¡Felicidades! Has completado este proyecto. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.



