In Python werden if-, elif- (eine Verkürzung von ‚else and if') und else-Anweisungen verwendet, um den Ablauf der Ausführung zu steuern und Entscheidungen in einem Programm zu treffen.
Anders als viele andere Programmiersprachen bietet Python in den Versionen 3.9 und älter keine formale switch-Anweisung; stattdessen werden mehrere elif-Anweisungen für einen ähnlichen Zweck verwendet.
Python 3.10 führt eine Variante der switch-Anweisung mit dem Namen pattern matching ein, die in einem anderen Konzept separat behandelt wird.
Bedingte Anweisungen verwenden Ausdrücke, die zu True oder False aufgelöst werden müssen, entweder indem sie direkt ein bool zurückgeben oder indem sie „truthy" oder „falsy" auswerten.
x = 10
y = 5
# The comparison '>' returns the bool 'True',
# so the statement is printed.
if x > y:
print("x is greater than y")
...
>>> x is greater than y
In Kombination mit if wird ein optionaler else-Block ausgeführt, wenn die ursprüngliche if-Bedingung zu False ausgewertet wird:
x = 5
y = 10
# The comparison '>' here returns the bool False,
# so the 'else' block is executed instead of the 'if' block.
if x > y:
print("x is greater than y")
else:
print("y is greater than x")
...
>>> y is greater than x
elif erlaubt mehrere Auswertungen bzw. Verzweigungen.
x = 5
y = 10
z = 20
# The elif statement allows for the checking of more conditions.
if x > y > z:
print("x is greater than y and z")
elif y > x > z:
print("y is greater than x and z")
else:
print("z is greater than x and y")
...
>>> z is greater than x and y
Boolesche Operationen und Vergleiche lassen sich mit bedingten Anweisungen kombinieren, um komplexere Prüfungen durchzuführen:
>>> def classic_fizzbuzz(number):
... if number % 3 == 0 and number % 5 == 0:
... say = 'FizzBuzz!'
... elif number % 5 == 0:
... say = 'Buzz!'
... elif number % 3 == 0:
... say = 'Fizz!'
... else:
... say = str(number)
...
... return say
>>> classic_fizzbuzz(15)
'FizzBuzz!'
>>> classic_fizzbuzz(13)
'13'
Alternativ lässt sich das Beispiel oben so umschreiben, dass nur if-Anweisungen mit returns verwendet werden.
Diese Umschreibung kann jedoch verschleiern, dass die Bedingungen sich gegenseitig ausschließen sollen, und kann später zu Fehlern oder Wartungsproblemen führen.
>>> def classic_fizzbuzz(number):
... if number % 3 == 0 and number % 5 == 0:
... return 'FizzBuzz!'
... if number % 5 == 0:
... return 'Buzz!'
... if number % 3 == 0:
... return 'Fizz!'
...
... return str(number)
>>> classic_fizzbuzz(15)
'FizzBuzz!'
>>> classic_fizzbuzz(13)
'13'
Bedingte Anweisungen lassen sich auch verschachteln.
>>> def driving_status(driver_age, test_score):
... if test_score >= 80:
... if 18 > driver_age >= 16:
... status = "Student driver, needs supervision."
... elif driver_age == 18:
... status = "Permitted driver, on probation."
... elif driver_age > 18:
... status = "Fully licensed driver."
... else:
... status = "Unlicensed!"
...
... return status
>>> driving_status(63, 78)
'Unlicensed!'
>>> driving_status(16, 81)
'Student driver, needs supervision.'
>>> driving_status(23, 80)
'Fully licensed driver.'
Python hat zwar keinen eigenen ?-Ternäroperator, aber es ist möglich, einzeilige conditional expressions zu schreiben.
Sie haben die Form <value if True> if <conditional test> else <value if False>.
Da solche Ausdrücke schwer lesbar werden können, empfiehlt es sich, diese einzeilige Form nur zu verwenden, wenn sie den Code verkürzt und die Lesbarkeit verbessert.
>>> def just_the_buzz(number):
... return 'Buzz!' if number % 5 == 0 else str(number)
>>> just_the_buzz(15)
'Buzz!'
>>> just_the_buzz(7)
'7'
In Python kann jedes Objekt auf seinen Wahrheitswert geprüft werden und lässt sich daher mit einer bedingten Anweisung, einem Vergleich oder einer booleschen Operation verwenden.
Objekte, die auf diese Weise ausgewertet werden, gelten als „truthy" oder „falsy" und werden in einem boolean context verwendet.
>>> def truthy_test(thing):
... if thing:
... print('This is Truthy.')
... else:
... print("Nope. It's Falsy.")
# Empty container objects are considered Falsy.
>>> truthy_test([])
"Nope. It's Falsy."
>>> truthy_test(['bear', 'pig', 'giraffe'])
'This is Truthy.'
# Empty strings are considered Falsy.
>>> truthy_test('')
"Nope. It's Falsy."
>>> truthy_test('yes')
'This is Truthy.'
# 0 is also considered Falsy.
>>> truthy_test(0)
"Nope. It's Falsy."