HOWTO · Python
Prüfen ob eine Zahl in Python gerade oder ungerade ist
Wir können den Modulus-Operator % oder den bitweisen AND-Operator & verwenden, um in Python zu prüfen, ob eine Zahl gerade oder ungerade ist.
Auf dieser Seite
In Python lässt sich prüfen, ob eine ganze Zahl gerade ist, indem man testet, ob num % 2 gleich 0 ist; andernfalls ist sie ungerade. Eine gerade ganze Zahl ist ohne Rest durch zwei teilbar, während bei einer ungeraden Zahl der Rest eins beträgt. Der Modulo-Operator ist für diese Aufgabe die verständlichste Standardlösung. Bitweises AND mit 1 ist eine weitere Möglichkeit, die ausschließlich für ganze Zahlen geeignet ist.
Mit dem Modulo-Operator die Parität prüfen
Der Modulo-Operator % liefert den Rest einer Division. Bei einer ganzen Zahl ergibt die Division durch 2 den Rest 0, wenn die Zahl gerade ist, und 1, wenn sie ungerade ist. Diese Regel gilt in Python auch für negative ganze Zahlen: Zum Beispiel ist -4 % 2 gleich 0, während -3 % 2 gleich 1 ist.
Führe dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
def check_parity(num):
if num % 2 == 0:
print("even")
else:
print("odd")
check_parity(22)
Die bereitgestellte Laufzeitausführung gibt für check_parity(22) even aus. Die Funktion prüft direkt die Teilbarkeit und gibt eine Beschriftung aus. Ersetze 22 durch die ganze Zahl, die du prüfen möchtest. Die Funktion erwartet eine ganze Zahl und keinen Dezimalwert wie 2.5. Die Ausgabebeschriftung bleibt im unveränderten Beispiel auf Englisch.
Mit dem bitweisen AND-Operator die Parität prüfen
Der bitweise AND-Operator & vergleicht die entsprechenden Bits zweier ganzer Zahlen. In der Binärdarstellung einer ganzen Zahl ist das niederwertigste Bit bei einer geraden Zahl 0 und bei einer ungeraden Zahl 1. Deshalb ergibt num & 1 bei einer geraden ganzen Zahl 0 und bei einer ungeraden ganzen Zahl 1. Python führt hier eine bitweise Operation mit ganzen Zahlen aus; zuvor wird keine Binärzeichenfolge erzeugt.
Zum Beispiel ist das niederwertigste Bit von 22 0, also ergibt 22 & 1 den Wert 0. Bei 33 ist dieses Bit 1, daher ergibt 33 & 1 den Wert 1. Die folgende Funktion verwendet dieses Ergebnis als Bedingung:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
def check_parity(num):
if num & 1 == 0:
print("even")
else:
print("odd")
check_parity(33)
Die bereitgestellte Laufzeitausführung gibt für check_parity(33) odd aus. Der Ausdruck num & 1 wird vor dem Gleichheitsvergleich ausgewertet. Die Bedingung prüft daher, ob das niederwertigste Bit nicht gesetzt ist. Wie bei der Modulo-Variante muss der Funktion eine ganze Zahl übergeben werden. Die Ausgabebeschriftung bleibt im unveränderten Beispiel auf Englisch.
Für bessere Lesbarkeit den Modulo-Operator wählen
Beide Ausdrücke beantworten die Frage nach der Parität ganzer Zahlen: num % 2 == 0 verwendet den Divisionsrest, während num & 1 == 0 das niedrigste Bit prüft. Die Modulo-Variante macht die Absicht meist unmittelbarer deutlich, besonders für Leserinnen und Leser, die nicht mit Bits arbeiten. Verwende sie für gewöhnliche Paritätsprüfungen, sofern bitweise Operationen nicht bereits zum umgebenden Code passen oder das Verhalten auf Bitebene selbst relevant ist.
Die bitweise Variante ist eine gültige Alternative, aber bei typischem Python-Code keine notwendige Optimierung. Entscheide dich für eine Variante und verwende sie einheitlich. Achte außerdem auf den Eingabetyp: Diese Prüfungen beschreiben die Parität ganzer Zahlen und nicht die mathematische Teilbarkeit beliebiger Zahlenwerte durch zwei. Wenn eine Funktion externe Eingaben entgegennimmt, prüfe oder konvertiere die Eingabe vor dem Aufruf der Paritätsprüfung. Welche Konvertierung sinnvoll ist, hängt von der Anwendung ab und sollte nicht in der Paritätsbedingung verborgen werden.