Zeitreisezielrechner

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

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

Datumsinformationen extrahieren

In diesem Schritt lernst du, wie du das Jahr, den Monat und den Tag aus dem eingegebenen Zeitstring extrahierst.

  1. Öffne die Datei time_travel_destination.py in deinem bevorzugten Code-Editor.
  2. Locate die Funktion time_travel_destination(time: str, days: int).
  3. Füge innerhalb der Funktion folgenden Code hinzu, um das Jahr, den Monat und den Tag aus dem Parameter time zu 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.

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

Die Vergangenheits- und Zukunftsdatum berechnen

In diesem Schritt lernst du, wie du die Vergangenheits- und Zukunftsdatum basierend auf der gegebenen Anzahl der Tage berechnest.

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

Die Ergebnisse formatieren und zurückgeben

In diesem Schritt lernst du, wie du die Vergangenheits- und Zukunftsdatum formatierst und als Liste von Strings zurückgibst.

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

  1. Füge abschließend einen Ausnahmebehandlungsblock hinzu, um alle ValueError- oder OverflowError-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']
✨ Lösung prüfen und üben

Zusammenfassung

Herzlichen Glückwunsch! Du hast dieses Projekt abgeschlossen. Du kannst in LabEx weitere Übungen absolvieren, um deine Fähigkeiten zu verbessern.