HOWTO · Python

Schaltjahr in Python bestimmen

Dieser Artikel behandelt Schaltjahre und eine Implementierung, um zu testen, ob ein Jahr ein Schaltjahr ist oder nicht, indem Python verwendet wird.

Auf dieser Seite

Um in Python zu prüfen, ob ein ganzzahliges Jahr ein Schaltjahr ist, verwenden Sie calendar.isleap(year) oder wenden Sie die gregorianische Regel an: Durch 4 teilbare Jahre sind Schaltjahre, mit einer Ausnahme für Jahrhundertjahre, die nur dann Schaltjahre sind, wenn sie auch durch 400 teilbar sind.

Die Schaltjahrregel verstehen

Im gregorianischen Kalender ist ein Jahr ein Schaltjahr, wenn es durch 4 teilbar ist. Ist es durch 100 teilbar, zählt es nur dann als Schaltjahr, wenn es zugleich durch 400 teilbar ist. Als boolescher Ausdruck lautet die Regel (year % 4 == 0 and year % 100 != 0) or year % 400 == 0. Der Rest ist null, wenn die Division ohne Rest aufgeht; der Operator % liefert diesen Rest.

2024 ist beispielsweise ein Schaltjahr, weil es durch 4, aber nicht durch 100 teilbar ist. 2027 ist ein gewöhnliches Jahr, weil es nicht durch 4 teilbar ist. Das Jahrhundertjahr 1900 ist kein Schaltjahr, weil es nicht durch 400 teilbar ist; 2000 hingegen ist eines, da es durch 400 teilbar ist. Nach derselben Regel ist auch 4000 ein Schaltjahr. Die Beispiele zeigen, warum die Prüfung auf Teilbarkeit durch 4 bei manchen Jahrhundertjahren zum falschen Ergebnis führt.

Die folgenden Beispiele erwarten direkt eine Ganzzahl als Jahr. Sie ergänzen weder das Einlesen noch die Validierung einer Eingabe. Wandeln Sie einen Wert wie eingegebenen Text erst in eine Ganzzahl um, bevor Sie ihn an eine Prüfung übergeben.

Ein Jahr mit if-else in Python prüfen

Verwenden Sie eine if-else-Anweisung, wenn die Regel sichtbar und leicht anpassbar bleiben soll. Die erste Bedingung trifft auf Jahre zu, die durch 4, aber nicht durch 100 teilbar sind. Die zweite erfasst Jahrhundertjahre, die durch 400 teilbar sind. Alle übrigen Jahre sind gewöhnliche Jahre.

Führen Sie dieses Beispiel aus. Die Ausgabe verwendet die englische Bezeichnung „leap year“; sie bleibt im unveränderten Code auf Englisch.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

year = 2024

if year % 4 == 0 and year % 100 != 0:
    is_leap_year = True
elif year % 400 == 0:
    is_leap_year = True
else:
    is_leap_year = False

print(f"{year} is a {'leap' if is_leap_year else 'common'} year")

2024 is a leap year

2024 is a leap year

Das Beispiel prüft eine einzelne Ganzzahl. Um ein anderes Jahr zu prüfen, weisen Sie diesen Wert year zu. Verwenden Sie etwa 1900, um die Jahrhundertausnahme zu sehen, oder 2000, um die 400-Jahre-Regel anzuwenden. Die Ausgabe bezeichnet das Jahr mit den englischen Wörtern „leap year“ oder „common year“; diese bleiben unverändert.

Ein Jahr mit Pythons calendar.isleap() prüfen

Das Python-Standardbibliotheksmodul calendar stellt calendar.isleap bereit. Diese Funktion gibt für ein Schaltjahr True und andernfalls False zurück. Es handelt sich um eine Funktion, nicht um eine Methode; sie wendet die gregorianische Schaltjahrregel an. Importieren Sie das Modul und übergeben Sie der Funktion das ganzzahlige Jahr.

Führen Sie dieses Beispiel aus. Die Ausgabe verwendet die englische Bezeichnung „leap year“; sie bleibt im unveränderten Code auf Englisch.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import calendar

year = 2000
print(f"{year} is a {'leap' if calendar.isleap(year) else 'common'} year")

2000 is a leap year

2000 is a leap year

Verwenden Sie calendar.isleap(year), wenn Sie eine knappe Prüfung aus der Standardbibliothek nutzen möchten, statt die Teilbarkeitsbedingungen selbst zu pflegen. Das Ergebnis der Funktion ist ein boolescher Wert und kann daher auch eine weitere if-Anweisung steuern. Weitere Funktionen des Moduls finden Sie in der Python-Dokumentation zu calendar. Die englischen Bezeichnungen „leap year“ und „common year“ in der unveränderten Ausgabe bleiben Englisch.

Ein Schaltjahr mit einem bedingten Ausdruck prüfen

Ein bedingter Ausdruck fasst zwei mögliche Ergebnisse in einem einzigen Ausdruck zusammen. Das ist kompakt, doch beim ersten Lernen der Regel lässt sich die if-else-Variante oft leichter überblicken. Dieses Beispiel verwendet weiterhin eine Ganzzahl als Eingabe und ruft die Funktion aus der Standardbibliothek auf.

Führen Sie dieses Beispiel aus. Die Ausgabe verwendet die englische Bezeichnung „common year“; sie bleibt im unveränderten Code auf Englisch.

Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.

import calendar

year = 2027
result = "leap" if calendar.isleap(year) else "common"
print(f"{year} is a {result} year")

2027 is a common year

2027 is a common year

Der Ausdruck hat die Form value_if_true if condition else value_if_false. Die Bedingung wird einmal ausgewertet; ihr boolesches Ergebnis bestimmt, welcher Wert ausgewählt wird. Diese Form eignet sich für eine kurze Auswahl, etwa eines Textetiketts. Wenn die Zweige mehrere Anweisungen enthalten sollen, verwenden Sie eine gewöhnliche if-else-Anweisung.

Weitere Informationen zu Datumsberechnungen finden Sie unter Datumsangaben mit Python-Timedelta-Monaten berechnen.