Introduction
Dans ce projet, vous allez apprendre à construire une calculatrice de destination de voyage dans le temps à l'aide de Python. Cette calculatrice vous aidera à déterminer les dates maximales passées et futures que peut atteindre un vaisseau spatial capable de voyager dans le temps, en fonction de la date actuelle et du nombre estimé de jours que le vaisseau peut voyager.
👀 Aperçu
## Entrée :
## Sortie :
🎯 Tâches
Dans ce projet, vous allez apprendre :
- Comment extraire des informations de date à partir d'une chaîne de caractères donnée
- Comment calculer les dates passées et futures en fonction du nombre de jours donné
- Comment formater les dates calculées et les renvoyer sous forme d'une liste de chaînes de caractères
🏆 Réalisations
Après avoir terminé ce projet, vous serez capable de :
- Comprendre comment travailler avec les dates et les timedelta en Python
- Implémenter une fonction pour calculer la destination du voyage dans le temps
- Gérer les exceptions et les cas limites dans votre code
- Écrire un code Python propre et maintenable
Extraire des informations sur la date
Dans cette étape, vous allez apprendre à extraire l'année, le mois et le jour à partir de la chaîne de caractères de temps d'entrée.
- Ouvrez le fichier
time_travel_destination.pydans votre éditeur de code préféré. - Localisez la fonction
time_travel_destination(time: str, days: int). - À l'intérieur de la fonction, ajoutez le code suivant pour extraire l'année, le mois et le jour à partir du paramètre
time:
try:
## Extraire l'année, le mois et le jour à partir de la chaîne de caractères de temps
year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
## ## Si une ValueError ou une OverflowError se produit, renvoyer une liste vide
## return []
Cette ligne utilise la fonction map() et la méthode split() pour convertir la chaîne de caractères time en une liste d'entiers représentant l'année, le mois et le jour.
- Ensuite, vous devez vérifier si la date extraite est valide. Vous pouvez utiliser la fonction
datetime.date()pour ce faire :
## Extraire l'année, le mois et le jour à partir de la chaîne de caractères de temps
year, month, day = map(int, time.split("-"))
## Vérifier si la date est valide
datetime.date(year, month, day)
Si la date est valide, cette ligne ne levera aucune exception. Si la date est invalide, une ValueError sera levée.
Calculer les dates passées et futures
Dans cette étape, vous allez apprendre à calculer les dates passées et futures en fonction du nombre de jours donné.
- À l'intérieur de la fonction
time_travel_destination(time: str, days: int), ajoutez le code suivant pour calculer les dates passées et futures :
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 est calculée en soustrayant le paramètre days à la date d'origine. Cependant, si la date résultante est antérieure à la date minimale représentable (1er janvier 1 ap. J.-C.), une OverflowError sera levée. Dans ce cas, nous définissons past_time sur la date minimale représentable.
La variable future_time est calculée en ajoutant le paramètre days à la date d'origine.
Formater et retourner les résultats
Dans cette étape, vous allez apprendre à formater les dates passées et futures et à les renvoyer sous forme d'une liste de chaînes de caractères.
- À l'intérieur de la fonction
time_travel_destination(time: str, days: int), ajoutez le code suivant pour formater les dates passées et futures et les renvoyer sous forme d'une liste :
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
La méthode strftime() est utilisée pour formater les objets datetime.date past_time et future_time en chaînes de caractères au format "dd-mm-yyyy".
- Enfin, ajoutez un bloc de gestion d'exceptions pour attraper toute exception
ValueErrorouOverflowErrorqui peut se produire pendant l'exécution de la fonction :
except (ValueError, OverflowError):
return []
Si l'une de ces exceptions est levée, la fonction renverra une liste vide.
Votre fonction time_travel_destination(time: str, days: int) finale devrait ressembler à ceci :
import datetime
def time_travel_destination(time: str, days: int):
try:
## Extraire l'année, le mois et le jour à partir de la chaîne de caractères de temps
year, month, day = map(int, time.split("-"))
## Vérifier si la date est valide
datetime.date(year, month, day)
try:
## Soustraire le nombre spécifié de jours à la date donnée
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
## Si une OverflowError se produit, définir past_time sur la date minimale représentable
past_time = datetime.date(1, 1, 1)
## Ajouter le nombre spécifié de jours à la date donnée
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
## Renvoyer les dates passées et futures au format 'dd-mm-yyyy'
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
except (ValueError, OverflowError):
## Si une ValueError ou une OverflowError se produit, renvoyer une liste vide
return []
Vous avez maintenant terminé l'implémentation de la fonction time_travel_destination(time: str, days: int). Vous pouvez tester la fonction en exécutant les exemples fournis dans le bloc principal du fichier time_travel_destination.py. Certains exemples sont donnés ci-dessous :
- Entrée :
print(time_travel_destination('2238-2-11', 30))
print(time_travel_destination('2238-2-11', 0))
print(time_travel_destination('2238-2-11', 100))
- Sortie :
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']
Résumé
Félicitations ! Vous avez terminé ce projet. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.



