Python Kontrollfluss

Python Kontrollfluss

Der Kontrollfluss ist die Reihenfolge, in der einzelne Anweisungen, Befehle oder Funktionsaufrufe ausgeführt oder ausgewertet werden. Der Kontrollfluss eines Python-Programms wird durch bedingte Anweisungen, Schleifen und Funktionsaufrufe gesteuert.

Vergleichsoperatoren

OperatorBedeutung
==Gleich
!=Ungleich
<Kleiner als
>Größer als
<=Kleiner oder gleich
>=Größer oder gleich

Diese Operatoren ergeben je nach den gegebenen Werten True oder False.

Beispiele:

42 == 42
True
40 == 42
False
'hello' == 'hello'
True
'hello' == 'Hello'
False
'dog' != 'cat'
True
42 == 42.0
True
42 == '42'
False
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was ergibt 'hello' == 'Hello'?
A. True
B. False
C. None
D. Löst einen Fehler aus

Boolesche Operatoren

Es gibt drei Boolesche Operatoren: and, or und not. In der Reihenfolge der Präzedenz, von höchster zu niedrigster, sind dies not, and und or.

Die Wahrheitstabelle des and-Operators:

AusdruckErgibt
True and TrueTrue
True and FalseFalse
False and TrueFalse
False and FalseFalse

Die Wahrheitstabelle des or-Operators:

AusdruckErgibt
True or TrueTrue
True or FalseTrue
False or TrueTrue
False or FalseFalse

Die Wahrheitstabelle des not-Operators:

AusdruckErgibt
not TrueFalse
not FalseTrue

Vermischung von Operatoren

Sie können Boolesche und Vergleichsoperatoren mischen:

(4 < 5) and (5 < 6)
True
(4 < 5) and (9 < 6)
False
(1 == 2) or (2 == 2)
True

Sie können auch mehrere Boolesche Operatoren in einem Ausdruck zusammen mit den Vergleichsoperatoren verwenden:

2 + 2 == 4 and not 2 + 2 == 5 and 2 * 2 == 2 + 2
True
# Im folgenden Ausdruck wird zuerst 3 < 4 and 5 > 5 ausgewertet, was zu False führt.
# Dann gibt 5 > 4 True zurück, sodass das Ergebnis nach True or False True ist.
5 > 4 or 3 < 4 and 5 > 5
True
# Nun wird der Ausdruck in Klammern zuerst ausgewertet, sodass True and False zu False führt.
(5 > 4 or 3 < 4) and 5 > 5
False

if Anweisungen

Die if-Anweisung wertet einen Ausdruck aus, und wenn dieser Ausdruck True ist, führt sie den folgenden eingerückten Code aus:

# if Anweisung: Codeblock ausführen, wenn Bedingung True ist
name = 'Debora'

if name == 'Debora':  # Prüfen, ob name gleich 'Debora' ist
   print('Hi, Debora')  # Diese Zeile wird ausgeführt, wenn die Bedingung True ist
Hi, Debora
if name != 'George':
   print('You are not George')
You are not George

Die else-Anweisung wird nur ausgeführt, wenn die Auswertung des if und aller elif-Ausdrücke False ist:

# if-else: unterschiedlichen Code basierend auf der Bedingung ausführen
name = 'Debora'

if name == 'George':
   print('Hi, George.')
else:  # Wird ausgeführt, wenn die if-Bedingung False ist
   print('You are not George')
You are not George
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Wann wird der else-Block in einer if-else-Anweisung ausgeführt?
A. Immer
B. Nur wenn die if-Bedingung (und alle elif-Bedingungen, falls vorhanden) False sind
C. Nur wenn die if-Bedingung True ist
D. Nie

Erst nachdem der Ausdruck der if-Anweisung False ist, wird die elif-Anweisung ausgewertet und ausgeführt:

# if-elif: mehrere Bedingungen nacheinander prüfen
name = 'George'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':  # Nur geprüft, wenn die vorherige Bedingung False ist
   print('Hi George!')
Hi George!

Die Teile elif und else sind optional.

name = 'Antony'

if name == 'Debora':
   print('Hi Debora!')
elif name == 'George':
   print('Hi George!')
else:
   print('Who are you?')
Who are you?

Ternärer Bedingungsoperator

Viele Programmiersprachen verfügen über einen ternären Operator, der einen bedingten Ausdruck definiert. Die häufigste Verwendung ist die Erstellung einer knappen, einfachen bedingten Zuweisungsanweisung. Mit anderen Worten, er bietet Code in einer Zeile, um den ersten Ausdruck auszuwerten, wenn die Bedingung wahr ist, und andernfalls den zweiten Ausdruck auszuwerten.

<Ausdruck1> if <Bedingung> else <Ausdruck2>

Beispiel:

age = 15

# diese if-Anweisung:
if age < 18:
   print('kid')
else:
   print('adult')
kid
# Ternärer Operator: bedingter Ausdruck in einer Zeile
# Syntax: Wert_wenn_wahr if Bedingung else Wert_wenn_falsch
print('kid' if age < 18 else 'adult')
kid

Ternäre Operatoren können verkettet werden:

age = 15

# dieser ternäre Operator:
print('kid' if age < 13 else 'teen' if age < 18 else 'adult')
teen
# entspricht dieser if-Anweisung:
if age < 13:
    print('kid')
else:
    if age < 18:
        print('teen')
    else:
        print('adult')
teen

Switch-Case-Anweisung

Switch-Case-Anweisungen

In Programmiersprachen ist eine Switch-Anweisung eine Art von Auswahlsteuerungsmechanismus, der verwendet wird, um den Wert einer Variablen oder eines Ausdrucks durch Suche und Abbildung den Programmablauf zu ändern.

Die Switch-Case-Anweisungen oder Strukturelle Mustererkennung (Structural Pattern Matching) wurden erstmals 2020 über PEP 622 eingeführt und dann offiziell mit Python 3.10 im September 2022 veröffentlicht.

Offizielles Tutorial

Die PEP 636 bietet ein offizielles Tutorial für die Python-Mustererkennung oder Switch-Case-Anweisungen.

Abgleich einzelner Werte

response_code = 201
match response_code:
    case 200:
        print("OK")
    case 201:
        print("Created")
    case 300:
        print("Multiple Choices")
    case 307:
        print("Temporary Redirect")
    case 404:
        print("404 Not Found")
    case 500:
        print("Internal Server Error")
    case 502:
        print("502 Bad Gateway")
Created

Abgleich mit dem or-Muster

In diesem Beispiel erlaubt das Pipe-Zeichen (| oder or), dass Python dieselbe Antwort für zwei oder mehr Fälle zurückgibt.

response_code = 502
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
Internal Server Error

Abgleich nach der Länge eines Iterierbaren

today_responses = [200, 300, 404, 500]
match today_responses:
    case [a]:
            print(f"One response today: {a}")
    case [a, b]:
            print(f"Two responses today: {a} and {b}")
    case [a, b, *rest]:
            print(f"All responses: {a}, {b}, {rest}")
All responses: 200, 300, [404, 500]

Standardwert

Das Unterstrichsymbol (_) wird verwendet, um einen Standardfall zu definieren:

response_code = 800
match response_code:
    case 200 | 201:
        print("OK")
    case 300 | 307:
        print("Redirect")
    case 400 | 401:
        print("Bad Request")
    case 500 | 502:
        print("Internal Server Error")
    case _:
        print("Invalid Code")
Invalid Code

Abgleich eingebauter Klassen

response_code = "300"
match response_code:
    case int():
            print('Code is a number')
    case str():
            print('Code is a string')
    case _:
            print('Code is neither a string nor a number')
Code is a string

Absichern von Match-Case-Anweisungen (Guarding)

response_code = 300
match response_code:
    case int() if response_code > 99 and response_code < 500:
            print('Code is a valid number')
    case _:
            print('Code is an invalid number')
Code is a valid number

while Schleifenanweisungen

Die while-Anweisung wird für wiederholte Ausführung verwendet, solange ein Ausdruck True ist:

# while Schleife: Code wiederholen, solange Bedingung True ist
spam = 0
while spam < 5:  # Fortfahren, solange spam kleiner als 5 ist
    print('Hello, world.')
    spam = spam + 1  # Zähler erhöhen, um eine Endlosschleife zu vermeiden
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Hello, world.
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was macht eine while-Schleife?
A. Wiederholt Code, solange die Bedingung True ist
B. Führt Code genau einmal aus
C. Führt Code eine festgelegte Anzahl von Malen aus
D. Überspringt die Codeausführung

break Anweisungen

Wenn die Ausführung auf eine break-Anweisung trifft, wird die while-Schleifenklausel sofort verlassen:

# break Anweisung: Schleife sofort beenden, wenn sie angetroffen wird
while True:  # Endlosschleife
    name = input('Please type your name: ')
    if name == 'your name':
        break  # Schleife sofort verlassen

print('Thank you!')
Please type your name: your name
Thank you!

continue Anweisungen

Wenn die Programmausführung auf eine continue-Anweisung trifft, springt die Programmausführung sofort zurück zum Anfang der Schleife.

# continue Anweisung: Rest der Schleifeniteration überspringen und nächste Iteration starten
while True:
    name = input('Who are you? ')
    if name != 'Joe':
        continue  # Zur nächsten Iteration springen, nicht nach dem Passwort fragen
    password = input('Password? (It is a fish.): ')
    if password == 'swordfish':
        break  # Schleife verlassen, wenn das Passwort korrekt ist

print('Access granted.')
Who are you? Charles
Who are you? Debora
Who are you? Joe
Password? (It is a fish.): swordfish
Access granted.

For Schleife

Die for-Schleife iteriert über eine list, tuple, dictionary, set oder string:

# for Schleife: über jedes Element in einer Sequenz iterieren
pets = ['Bella', 'Milo', 'Loki']
for pet in pets:  # Durch jedes Haustier in der Liste iterieren
    print(pet)  # Jeden Haustiernamen ausgeben
Bella
Milo
Loki
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Worüber iteriert eine for-Schleife?
A. Nur Zahlen
B. Nur Strings
C. Jede iterierbare Sequenz (Liste, Tupel, Dictionary, Set, String usw.)
D. Nur Listen

Die range() Funktion

Die range()-Funktion gibt eine Zahlenfolge zurück. Sie beginnt bei 0, wird um 1 erhöht und stoppt vor einer angegebenen Zahl:

for i in range(5):
    print(f'Will stop at 5! or 4? ({i})')
Will stop at 5! or 4? (0)
Will stop at 5! or 4? (1)
Will stop at 5! or 4? (2)
Will stop at 5! or 4? (3)
Will stop at 5! or 4? (4)
Quiz

Melden Sie sich an, um dieses Quiz zu beantworten und Ihren Lernfortschritt zu verfolgen

Was erzeugt range(5)?
A. Zahlen von 1 bis 5
B. Zahlen von 0 bis 4
C. Zahlen von 0 bis 5
D. Fünf Zufallszahlen

Die range()-Funktion kann auch ihre 3 Standardargumente modifizieren. Die ersten beiden sind die start- und stop-Werte, und der dritte ist das step-Argument. Der Schritt ist die Menge, um die die Variable nach jeder Iteration erhöht wird.

# range(start, stop, step)
for i in range(0, 10, 2):
   print(i)
0
2
4
6
8

Sie können sogar eine negative Zahl für das step-Argument verwenden, damit die for-Schleife rückwärts zählt statt vorwärts.

for i in range(5, -1, -1):
    print(i)
5
4
3
2
1
0

For else Anweisung

Dies ermöglicht die Angabe einer Anweisung, die ausgeführt wird, falls die gesamte Schleife durchlaufen wurde. Nur nützlich, wenn eine break-Bedingung in der Schleife auftreten kann:

for i in [1, 2, 3, 4, 5]:
   if i == 3:
       break
else:
   print("only executed when no item is equal to 3")

Programm beenden mit sys.exit()

Die exit()-Funktion ermöglicht das Beenden von Python.

import sys

while True:
    feedback = input('Type exit to exit: ')
    if feedback == 'exit':
        print(f'You typed {feedback}.')
        sys.exit()
Type exit to exit: open
Type exit to exit: close
Type exit to exit: exit
You typed exit.