Einführung
In diesem Projekt lernst du, wie du einen Zeitreisezielrechner mit Python erstellen kannst. Dieser Rechner hilft dir, die maximale Vergangenheits- und Zukunftsdatum zu bestimmen, die ein Zeitreiseraumschiff erreichen kann, basierend auf dem aktuellen Datum und der geschätzten Anzahl der Tage, die das Raumschiff reisen kann.
👀 Vorschau
## Eingabe:
## Ausgabe:
🎯 Aufgaben
In diesem Projekt wirst du lernen:
- Wie du Datumsinformationen aus einem gegebenen String extrahierst
- Wie du die Vergangenheits- und Zukunftsdatum basierend auf der gegebenen Anzahl der Tage berechnest
- Wie du die berechneten Datum formatierst und als Liste von Strings zurückgibst
🏆 Errungenschaften
Nach Abschluss dieses Projekts wirst du in der Lage sein:
- Zu verstehen, wie man mit Datum und timedelta in Python umgeht
- Eine Funktion zur Berechnung des Zeitreiseziels zu implementieren
- Ausnahmen und Randfälle in deinem Code zu behandeln
- Sauberen und wartbaren Python-Code zu schreiben
Datumsinformation extrahieren
In diesem Schritt lernst du, wie du das Jahr, den Monat und den Tag aus dem eingegebenen Zeitstring extrahierst.
- Öffne die Datei
time_travel_destination.pyin deinem bevorzugten Code-Editor. - Locate die Funktion
time_travel_destination(time: str, days: int). - Füge innerhalb der Funktion folgenden Code hinzu, um das Jahr, den Monat und den Tag aus dem Parameter
timezu extrahieren:
try:
## Extrahiere Jahr, Monat und Tag aus dem Zeitstring
year, month, day = map(int, time.split("-"))
## except (ValueError, OverflowError):
## ## Wenn ein ValueError oder OverflowError auftritt, gib eine leere Liste zurück
## return []
Diese Zeile verwendet die Funktion map() und die Methode split(), um den Zeitstring in eine Liste von ganzen Zahlen umzuwandeln, die das Jahr, den Monat und den Tag repräsentieren.
- Als Nächstes musst du überprüfen, ob das extrahierte Datum gültig ist. Hierfür kannst du die Funktion
datetime.date()verwenden:
## Extrahiere Jahr, Monat und Tag aus dem Zeitstring
year, month, day = map(int, time.split("-"))
## Überprüfe, ob das Datum gültig ist
datetime.date(year, month, day)
Wenn das Datum gültig ist, wird diese Zeile keine Ausnahmen auslösen. Wenn das Datum ungültig ist, wird ein ValueError ausgelöst.
Berechne die Vergangenheits- und Zukunftsdatum
In diesem Schritt lernst du, wie du die Vergangenheits- und Zukunftsdatum basierend auf der gegebenen Anzahl der Tage berechnest.
- Füge innerhalb der Funktion
time_travel_destination(time: str, days: int)folgenden Code hinzu, um die Vergangenheits- und Zukunftsdatum zu berechnen:
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)
Die Variable past_time wird berechnet, indem der Parameter days vom ursprünglichen Datum abgezogen wird. Wenn das resultierende Datum jedoch vor dem minimal darstellbaren Datum (1. Januar 1 n. Chr.) liegt, wird ein OverflowError ausgelöst. In diesem Fall setzen wir past_time auf das minimal darstellbare Datum.
Die Variable future_time wird berechnet, indem der Parameter days zum ursprünglichen Datum hinzugefügt wird.
Formatiere und gebe die Ergebnisse zurück
In diesem Schritt lernst du, wie du die Vergangenheits- und Zukunftsdatum formatierst und als Liste von Strings zurückgibst.
- Füge innerhalb der Funktion
time_travel_destination(time: str, days: int)folgenden Code hinzu, um die Vergangenheits- und Zukunftsdatum zu formatieren und als Liste zurückzugeben:
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
Die Methode strftime() wird verwendet, um die past_time und future_time datetime.date-Objekte in Strings im Format "tt.mm.jjjj" umzuwandeln.
- Füge abschließend einen Ausnahmebehandlungsblock hinzu, um alle
ValueError- oderOverflowError-Ausnahmen zu fangen, die während der Funktionsausführung auftreten können:
except (ValueError, OverflowError):
return []
Wenn eine dieser Ausnahmen ausgelöst wird, wird die Funktion eine leere Liste zurückgeben.
Deine endgültige Funktion time_travel_destination(time: str, days: int) sollte wie folgt aussehen:
import datetime
def time_travel_destination(time: str, days: int):
try:
## Extrahiere Jahr, Monat und Tag aus dem Zeitstring
year, month, day = map(int, time.split("-"))
## Überprüfe, ob das Datum gültig ist
datetime.date(year, month, day)
try:
## Subtrahiere die angegebene Anzahl der Tage vom angegebenen Datum
past_time = datetime.date(year, month, day) - datetime.timedelta(days=days)
except OverflowError:
## Wenn ein OverflowError auftritt, setze past_time auf das minimal darstellbare Datum
past_time = datetime.date(1, 1, 1)
## Addiere die angegebene Anzahl der Tage zum angegebenen Datum
future_time = datetime.date(year, month, day) + datetime.timedelta(days=days)
## Gib die Vergangenheits- und Zukunftsdatum im Format 'tt.mm.jjjj' zurück
return [past_time.strftime("%d-%m-%Y"), future_time.strftime("%d-%m-%Y")]
except (ValueError, OverflowError):
## Wenn ein ValueError oder OverflowError auftritt, gib eine leere Liste zurück
return []
Du hast jetzt die Implementierung der Funktion time_travel_destination(time: str, days: int) abgeschlossen. Du kannst die Funktion testen, indem du die bereitgestellten Beispiele im Hauptblock der Datei time_travel_destination.py ausführst. Einige Beispiele sind unten angegeben:
- Eingabe:
print(time_travel_destination('2238-2-11', 30))
print(time_travel_destination('2238-2-11', 0))
print(time_travel_destination('2238-2-11', 100))
- Ausgabe:
['12-01-2238', '13-03-2238']
['11-02-2238', '11-02-2238']
['03-11-2237', '22-05-2238']
Zusammenfassung
Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.



