In diesem Leitfaden werden wir uns mit der Anwendung des ternären Operators in Python beschäftigen. Wir werden die dazugehörige Syntax ergründen und durch verschiedene Codebeispiele ein tiefes Verständnis seiner Funktionsweise entwickeln.
Zu Beginn rekapitulieren wir, wie eine bedingte if-else-Anweisung aufgebaut ist. Anschließend werden wir lernen, wie man einen vergleichbaren Ausdruck mit dem ternären Operator formuliert.
Danach werden wir uns einigen praktischen Beispielen widmen und untersuchen, wie das Verhalten des ternären Operators mit Python-Tupeln und Dictionaries nachgeahmt werden kann. Schließlich betrachten wir einige konkrete Anwendungsfälle, in denen die Verwendung des ternären Operators besonders vorteilhaft sein kann.
Lasst uns direkt loslegen!
Die If-Else-Anweisung in Python: Ein Rückblick
Gerne kannst du mitprogrammieren, indem du eine Python-REPL startest oder den Online-Python-Editor von wdzwdz nutzt.
Die grundlegende Struktur der if-else-Anweisung in Python sieht wie folgt aus:
if Bedingung: # führe dies aus else: # führe das aus
Im obigen Ausschnitt repräsentiert `Bedingung` die zu überprüfende Bedingung. Ist die Bedingung erfüllt (wahr), wird der Codeblock unterhalb von `if` ausgeführt. Trifft die Bedingung nicht zu (falsch), werden die Befehle innerhalb des `else`-Blocks ausgeführt.
Hier ist ein Beispiel, in dem der Variable `game_over` ein Boolescher Wert zugewiesen wird, der davon abhängt, ob der Energiewert kleiner oder gleich Null ist oder nicht:
- Wenn `Energie <= 0` ist, wird `game_over` auf `True` gesetzt.
- Andernfalls wird `game_over` auf `False` gesetzt.
Das folgende Codebeispiel zeigt, wie dies mit den `if-else`-Bedingungsanweisungen umgesetzt wird:
energy = -1 if energy <= 0: game_over = True else: game_over = False print(game_over) # True
In diesem Fall ist `Energie` gleich -1, was kleiner als 0 ist. Folglich wird `game_over` auf `True` gesetzt.
Der ternäre Operator in Python: Syntax und Anwendungsbeispiele
Python bietet einen ternären Operator, der funktional dem bedingten ternären Operator in Programmiersprachen wie C und C++ ähnelt. Die grundlegende Syntax lautet:
Ausdruck1 if Bedingung else Ausdruck2
Betrachten wir diese Syntax im Detail:
- `Bedingung`: Die Bedingung, die ausgewertet wird.
- `Ausdruck1`: Der Ausdruck, der ausgewertet wird, falls die Bedingung wahr ist.
- `Ausdruck2`: Der Ausdruck, der ausgewertet wird, falls die Bedingung falsch ist.
Nun identifizieren wir, welche Elemente aus der if-else-Version des Codes den Rollen von `Ausdruck1`, `Ausdruck2` und `Bedingung` entsprechen.
Zusammenfassend lässt sich die Verwendung des ternären Operators in Python wie folgt darstellen:
game_over = True if energy <= 0 else False print(game_over) # True
Betrachten wir ein weiteres Codebeispiel. Angenommen, du bist Inhaber einer Buchhandlung und bietest deinen Kunden einen Rabatt, der von der Anzahl ihrer Besuche im letzten Jahr abhängt.
Nennen wir die Anzahl der Besuche `numVisits`.
- Wenn `numVisits > 7` ist, beträgt der Rabattprozentsatz, `discount_perc`, 20.
- Andernfalls beträgt `discount_perc` 5.
Wir verwenden den ternären Operator, um der Variable `discount_perc` einen Wert zuzuweisen:
numVisits = 10 discount_perc = 20 if numVisits > 7 else 5 print(discount_perc) # 20 (da numVisits = 10 und somit > 7)
Im Folgenden werden wir untersuchen, wie der ternäre Operator mit Hilfe von Python-Tupeln und Dictionaries nachgebildet werden kann.
Die Emulation des ternären Operators mit Python-Tupeln
Wie alle iterierbaren Datenstrukturen in Python folgen Tupel der Null-Indizierung. Das heißt, wenn du ein Tupel mit zwei Elementen hast, bezeichnet `tupel_name[0]` das erste Element und `tupel_name[1]` das zweite Element.
Die grundlegenden Datentypen in Python umfassen Integer, Float, String und Boolean. Python erlaubt die Typumwandlung, wodurch ein Datentyp durch seine äquivalente Darstellung in einem anderen Datentyp ausgedrückt werden kann.
Starte eine Python REPL und führe die folgenden Beispiele aus. Bei der Umwandlung von ganzen Zahlen in Boolesche Werte wirst du feststellen:
- `bool(0)` ergibt `False`.
- `bool(
)` gibt `True` zurück.
>>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True
Analog dazu erhalten wir beim Umwandeln von Booleschen Werten in ganze Zahlen:
>>> int(True) 1 >>> int(False) 0
Indem wir Type-Casting und Indizierung kombinieren, können wir Folgendes konstruieren:
- Element an Index 0 im Tupel: Der Wert, der verwendet wird, wenn die Bedingung falsch ist.
- Element an Index 1 im Tupel: Der Wert, der verwendet wird, wenn die Bedingung wahr ist.
Basierend auf den obigen Ausführungen haben wir:
>>> numVisits = 10 >>> discount_perc = (5,20)[numVisits > 7] >>> discount_perc # 20
Hier ist die Bedingung `numVisits > 7` wahr, da `numVisits` gleich 10 ist. Da `int(True)` gleich 1 ist, ist der Wert von `discount_perc` gleich 20, also dem Element an Index 1.
Die Emulation des ternären Operators mit Python-Dictionaries
Du kannst `True` und `False` als Schlüssel in einem Dictionary definieren. Und die zugehörigen Werte sind `Ausdruck1` und `Ausdruck2`, die mit den Schlüsseln `True` bzw. `False` verbunden sind.
some_dict = {True: Ausdruck1, False: Ausdruck2 }
Was kommt als Nächstes? Wenn du nun `some_dict[Bedingung]` verwendest, wird `Ausdruck1`, der dem Schlüssel `True` zugeordnet ist, ausgewertet, falls die Bedingung `True` ist. Andernfalls wird `Ausdruck2` ausgewertet, falls die Bedingung falsch ist.
Lass uns das Beispiel mit `discount_perc` (erneut) codieren, dieses Mal unter Verwendung eines Python-Dictionaries:
>>> numVisits = 10 >>> discount_dict = {True: 20, False:5} >>> discount_perc = discount_dict[numVisits > 7] >>> discount_perc # 20
Hier ist `numVisits = 10`, was größer als 7 ist. Daher ist die Bedingung `numVisits > 7` wahr. Folglich wird `discount_dict[numVisits > 7]` zu `discount_dict[True]` ausgewertet, was den Wert 20 liefert.
Sollte man den ternären Operator in Python immer verwenden?
Bisher haben wir uns mit der Verwendung des ternären Operators beschäftigt. Doch sollten wir ihn immer anwenden? Der ternäre Operator ist nicht in allen Situationen die beste Wahl. In diesem Abschnitt betrachten wir, wann der ternäre Operator gegenüber der if-else-Anweisung zu bevorzugen ist. Wir besprechen auch Fälle, in denen die if-else-Anweisung gegenüber dem ternären Operator vorzuziehen ist.
Prägnanter als If-Else-Blöcke
Wie bereits erwähnt, ist der Ausdruck mit dem ternären Operator in Python prägnanter als die if-else-Anweisung. Daher eignet er sich, um Bedingungen zu prüfen und Ausdrücke innerhalb einer Zeile bedingt auszuwerten.
Im folgenden Beispiel ist `nums` eine Liste mit 10 zufällig generierten ganzen Zahlen. Für jede dieser 10 Zahlen prüfen wir, ob sie gerade oder ungerade ist. Diese Auswertung erfolgt direkt im f-String:
import random nums = [random.choice(range(100)) for i in range(10)] for num in nums: print(f"{num} ist {'gerade' if num%2==0 else 'ungerade'}")
# Beispielausgabe 0 ist gerade 56 ist gerade 6 ist gerade 53 ist ungerade 62 ist gerade 7 ist ungerade 8 ist gerade 77 ist ungerade 41 ist ungerade 94 ist gerade
Der ternäre Operator erfordert die Else-Klausel
In der bedingten if-else-Anweisung ist die else-Klausel optional. Betrachten wir ein Beispiel: Die Variable `game_over` wird auf `True` gesetzt, wenn der Energiewert auf einen Wert kleiner oder gleich Null sinkt.
Wenn die Energie jedoch größer als Null ist, wird die Variable `game_over` nie initialisiert. Es kommt zu einem Fehler, wenn du versuchst, auf `game_over` zuzugreifen.
energy = 5 if energy <= 0: game_over = True print(f"Ist das Spiel vorbei? {game_over}")
Traceback (most recent call last): File "ternary_op.py", line 39, in <module> print(f"Ist das Spiel vorbei? {game_over}") NameError: name 'game_over' is not defined
Eine Möglichkeit, dies zu umgehen, besteht darin, `game_over` zunächst auf `False` zu setzen und es auf `True` zu setzen, falls der Energiewert kleiner oder gleich Null ist:
energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Ist das Spiel vorbei? {game_over}")
Wenn du jedoch den ternären Operator von Python verwendest, der dem obigen entspricht, ist die else-Klausel keine Option. Der ternäre Operator erfordert, dass ein Ausdruck ausgewertet wird, falls die Bedingung falsch ist.
game_over = True if energy <= 0 else False
Wenn du das obige in `game_over = True if energy <= 0` änderst und den `else`-Teil entfernst, wird ein Syntaxfehler angezeigt, wie hier:
File "ternary_op.py", line 42 game_over = True if energy <= 0 ^ SyntaxError: invalid syntax
Zur Überprüfung mehrerer Bedingungen verwende If-Else-Anweisungen
Betrachte folgendes Szenario: Jede Frage in einer Reihe von Programmier-Interviewfragen hat eine entsprechende Schwierigkeitsstufe. Je nach dieser Bewertung weisen wir einer bestimmten Frage eine von drei Schwierigkeitsstufen zu: leicht, mittel oder schwer. Angenommen, wir haben folgende Zuordnung:
PunktzahlSchwierigkeitsgradWeniger als 10leichtZwischen 10 und 20mittelMehr als 20schwierig
Bei einer gegebenen Punktzahl kann die Schwierigkeitsstufe mit dem ternären Operator von Python wie folgt ermittelt werden:
score = 12 difficulty_level = "leicht" if score < 10 else "schwierig" if score > 20 else "mittel" print(difficulty_level) # mittel
Der ternäre Ausdruck im obigen Codeblock hat die folgende Struktur:
Ausdruck1 if Bedingung1 else Ausdruck2 if Bedingung2 else Ausdruck3
Obwohl dies prägnant ist, ist es etwas schwierig zu lesen und zu analysieren. Das folgende Bild veranschaulicht, wie der Kontrollfluss in diesem Fall abläuft.
Das folgende Codebeispiel zeigt eine äquivalente Implementierung mit if-else-Anweisungen. Wie du siehst, ist der Kontrollfluss wesentlich leichter zu verstehen und der Code besser lesbar.
if score < 10: difficulty_level="leicht" elif score > 20: difficulty_level="schwierig" else: difficulty_level="mittel" print(difficulty_level)
Daher solltest du bei der Arbeit mit mehreren Bedingungen die if-else-Blöcke anstelle des ternären Operators verwenden. Dies gewährleistet, dass der Code einfach zu lesen und zu verstehen ist.
Auch wenn du mehrere Anweisungen ausführen musst – je nachdem, ob eine Bedingung wahr oder falsch ist – solltest du die Verwendung der if-else-Anweisung in Betracht ziehen.
Zusammenfassung
Hier ist eine Zusammenfassung dessen, was du in dieser Anleitung gelernt hast.
- In Python kann der ternäre Operator mit der Syntax `Ausdruck1 if Bedingung else Ausdruck2` verwendet werden.
- Das Verhalten des ternären Operators kann mithilfe von Python-Tupeln und -Dictionaries nachgeahmt werden.
- Der ternäre Operator kann zwar eine prägnantere Alternative zu if-else-Blöcken darstellen, du solltest jedoch sicherstellen, dass der Code gut lesbar ist. Um die Lesbarkeit des Codes zu verbessern, ist es ratsam, die if-else-Anweisung anstelle des ternären Operators zu verwenden, insbesondere wenn du mehrere Bedingungen verketten musst.
Lies als Nächstes das Tutorial zu den Gleichheits- und Ungleichheitsoperatoren in Python.