Veraltet

Aufgabe

In den USA werden Daten normalerweise in der Reihenfolge Monat-Tag-Jahr (MM/TT/JJJJ) formatiert, auch bekannt als Middle-Endian-Reihenfolge, was ein ungünstiges Design ist. Dieses Format ist problematisch, da das Jahr am Ende steht, wodurch die Daten nicht einfach chronologisch sortiert werden können. Zum Beispiel lassen sich die Daten 2/2/1800, 3/3/1900 und 1/1/2000 in einem beliebigen Programm (z. B. einer Tabellenkalkulation) nur sehr schwer richtig ordnen. Zudem kann das Format auch missverstanden werden: Die Fakultät WIAI der Universität Bamberg wurde am October 1, 2001 gegründet. Der 10/1/2001 könnte aber auch als January 10, 2001 interpretiert werden.

Glücklicherweise verwenden Computer in der Regel ISO 8601, einen internationalen Standard, der vorschreibt, dass Datumsangaben unabhängig vom Land in der Reihenfolge Jahr-Monat-Tag (JJJJ-MM-TT) zu formatieren sind. Dabei werden Jahre mit vier Ziffern, Monate mit zwei Ziffern und Tage mit zwei Ziffern formatiert. Jede Ziffer wird nach Bedarf mit führenden Nullen “aufgefüllt”.

Erstellen Sie im Ordner outdated eine Datei namens outdated.py. Schreiben Sie ein Programm, das den Benutzer auffordert, ein Datum im Jahr anno Domini einzugeben. Das Datum kann in einem der folgenden Formate angegeben werden:

  • Monat-Tag-Jahr, z.B. 10/1/2001.
  • Monat Tag, Jahr, z.B. October 1, 2001, wobei der Monat aus einer vorgegebenen Liste von Monatsnamen stammen muss:
[
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]

Geben Sie dann dasselbe Datum im Format JJJJ-MM-TT aus. Sollte ein Benutzer kein gültiges Datum eingeben, soll das Programm erneut zur Eingabe auffordern. Gehen Sie davon aus, dass jeder Monat nicht mehr als 31 Tage hat. Sie müssen nicht überprüfen, ob ein Monat 28, 29, 30 oder 31 Tage hat.

Tipps
  • Ein str (String) in Python hat viele eingebaute Methoden, zum Beispiel split. Mehr dazu finden Sie in der zugehörigen Dokumentation.
  • Eine list (Liste) in Python besitzt ebenfalls verschiedene Methoden, wie etwa index. Details dazu stehen in der zugehörigen Dokumentation.
  • Wenn Sie eine Ganzzahl (int) mit führenden Nullen formatieren möchten, können Sie diesen Code verwenden:
    print(f"{n:02}")
    Falls n nur eine Ziffer ist, wird automatisch eine führende Null hinzugefügt. Weitere Informationen zur Formatierung gibt es in der zugehörigen Dokumentation.

Demo

Bevor Sie beginnen

Öffnen Sie VS Code entsprechend Ihrem Setup und führen Sie im Terminalfenster cd aus. Die Eingabeaufforderung Ihres Terminalfensters sollte ungefähr wie folgt aussehen:

$

Führen Sie als nächstes folgenden Befehl aus

mkdir outdated

um in Ihrem Codespace einen Ordner mit dem Namen outdated zu erstellen.

Führen Sie anschließend folgenden Befehl aus:

cd outdated

Nun können Sie

code outdated.py

ausführen, um eine Datei namens outdated.py zu erstellen. In diese Datei schreiben Sie nun Ihren Python Code.

Testen

Führen Sie zum testen Ihres Programms python outdated.py aus. Geben Sie nun die folgenden Eingaben ein und prüfen Sie, wie sich Ihr Programm verhält:

  • Test 1
    • Eingabe: 9/8/1636
    • Erwartetes Verhalten: 1636-09-08
  • Test 2
    • Eingabe: September 8, 1636
    • Erwartetes Verhalten: 1636-09-08
  • Test 3
    • Eingabe: 23/6/1912
    • Erwartetes Verhalten: Ihr Programm sollte den Benutzer erneut zur Eingabe auffordern, da es sich bei der Eingabe um ein falsch formatiertes Datum handelt.
  • Test 4
    • Eingabe: Dezember 81, 1990
    • Erwartetes Verhalten: Ihr Programm sollte den Benutzer erneut zur Eingabe auffordern, da es sich bei der Eingabe um ein falsch formatiertes Datum handelt.

Korrektheit

Führen Sie in Ihrem Terminal den folgenden Befehl aus, um die Korrektheit Ihres Programms zu überprüfen. Testen Sie Ihr Programm aber zuerst manuell.

check50 -l cs50/problems/2022/python/outdated

Style

Führen Sie den folgenden Befehl aus, um den Stil Ihres Codes mit style50 zu analysieren:

style50 outdated.py