Programmablaufsteuerung mit bedingten Anweisungen in Python

PythonPythonBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einleitung

In diesem Lab lernen Sie, wie Sie den Ablauf Ihrer Python-Programme mithilfe von bedingten Anweisungen steuern. Wir beginnen mit dem Verständnis des Konzepts der sequenziellen Programmausführung und führen dann bedingte Logik ein, um Programmen die Möglichkeit zu geben, Entscheidungen zu treffen.

Sie werden ein- und zweiseitige Logik mit if- und if-else-Anweisungen implementieren und mehrseitige Logik mit if-elif-else untersuchen. Das Lab behandelt auch verschachtelte if-Anweisungen und die pass-Anweisung und führt die match-case-Anweisung ein, die in Python 3.10 und neueren Versionen verfügbar ist. Am Ende dieses Labs werden Sie in der Lage sein, Python-Code zu schreiben, der basierend auf bestimmten Bedingungen unterschiedliche Anweisungsblöcke ausführt.

Sequenziellen Fluss verstehen und bedingte Logik einführen

In diesem Schritt werden wir das Konzept des sequenziellen Flusses in der Programmierung untersuchen und die Idee der bedingten Logik einführen, die es Programmen ermöglicht, Entscheidungen zu treffen.

Sequenzieller Fluss ist die grundlegendste Art der Programmausführung. Anweisungen werden nacheinander von oben nach unten ausgeführt. Dies haben wir in früheren Beispielen gesehen, bei denen jede Codezeile in der Reihenfolge ausgeführt wird, in der sie erscheint.

Erstellen wir ein einfaches Python-Skript, um den sequenziellen Fluss zu demonstrieren. Öffnen Sie das integrierte Terminal in der WebIDE und navigieren Sie zum Verzeichnis ~/project, falls Sie sich nicht bereits dort befinden.

cd ~/project

Erstellen Sie nun eine neue Datei namens sequential.py im Verzeichnis ~/project mithilfe des Dateiexplorers der WebIDE oder des Terminals.

touch sequential.py

Öffnen Sie sequential.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu:

print("First instruction")
print("Second instruction")
print("Third instruction")

Speichern Sie die Datei. Führen Sie nun das Skript im Terminal aus:

python sequential.py

Sie sehen die Ausgabe, die in der exakten Reihenfolge gedruckt wird, in der die print-Anweisungen im Skript erscheinen:

First instruction
Second instruction
Third instruction

Dies demonstriert den sequenziellen Fluss. Jede Zeile wird nacheinander ausgeführt.

Allerdings erfordern reale Probleme oft, dass Programme je nach bestimmten Bedingungen unterschiedlich reagieren. Hier kommt die bedingte Logik ins Spiel. Bedingte Logik ermöglicht es einem Programm zu wählen, welcher Code ausgeführt werden soll, basierend darauf, ob eine Bedingung wahr oder falsch ist.

Die grundlegendste bedingte Anweisung in Python ist die if-Anweisung. Die if-Anweisung ermöglicht es Ihnen, einen Codeblock nur dann auszuführen, wenn eine angegebene Bedingung wahr ist.

Die grundlegende Syntax einer if-Anweisung lautet:

if condition:
    ## Code, der ausgeführt wird, wenn die Bedingung wahr ist

Ändern wir unsere Datei sequential.py, um eine if-Anweisung einzufügen. Öffnen Sie sequential.py im Editor und ersetzen Sie den vorhandenen Inhalt durch Folgendes:

x = 10

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

Speichern Sie die Datei und führen Sie sie erneut aus:

python sequential.py

Die Ausgabe wird sein:

Before the if statement
x is greater than 5
After the if statement

In diesem Fall ist die Bedingung x > 5 wahr, daher wird der Codeblock innerhalb der if-Anweisung (print("x is greater than 5")) ausgeführt.

Ändern wir nun den Wert von x, um zu sehen, was passiert, wenn die Bedingung falsch ist. Ändern Sie sequential.py zu:

x = 3

print("Before the if statement")

if x > 5:
    print("x is greater than 5")

print("After the if statement")

Speichern Sie die Datei und führen Sie sie aus:

python sequential.py

Die Ausgabe wird sein:

Before the if statement
After the if statement

Dieses Mal ist die Bedingung x > 5 falsch, daher wird der Codeblock innerhalb der if-Anweisung übersprungen. Die Programmausführung wird nach der if-Anweisung fortgesetzt.

Dieses einfache Beispiel veranschaulicht, wie die if-Anweisung es uns ermöglicht, Entscheidungsfindung in unsere Programme einzubringen und über einfache sequenzielle Ausführung hinauszugehen.

Einseitige und zweiseitige Logik mit if und if-else implementieren

In diesem Schritt konzentrieren wir uns auf die Implementierung von einseitiger und zweiseitiger Logik mithilfe der if- und if-else-Anweisungen in Python.

Wie wir im vorherigen Schritt gelernt haben, ermöglicht die if-Anweisung eine einseitige Ausführung: Wenn die Bedingung wahr ist, wird ein Codeblock ausgeführt; andernfalls wird er übersprungen.

Erstellen wir eine neue Python-Datei namens branching.py im Verzeichnis ~/project.

cd ~/project
touch branching.py

Öffnen Sie branching.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu, um die einseitige if-Anweisung zu demonstrieren:

score = 85

if score >= 70:
    print("Congratulations! You passed.")

print("End of program.")

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python branching.py

Die Ausgabe wird sein:

Congratulations! You passed.
End of program.

Da score 85 ist, was größer oder gleich 70 ist, wird die Meldung "Congratulations! You passed." ausgegeben.

Ändern wir nun den score zu einem Wert kleiner als 70:

score = 65

if score >= 70:
    print("Congratulations! You passed.")

print("End of program.")

Speichern Sie die Datei und führen Sie sie erneut aus:

python branching.py

Die Ausgabe wird sein:

End of program.

Dieses Mal ist die Bedingung score >= 70 falsch, daher wird der Code im if-Block übersprungen.

Während die if-Anweisung nützlich ist, um Code nur dann auszuführen, wenn eine Bedingung wahr ist, müssen wir oft einen anderen Codeblock ausführen, wenn die Bedingung falsch ist. Hier kommt die if-else-Anweisung ins Spiel, die eine zweiseitige Logik bietet.

Die if-else-Anweisung ermöglicht es Ihnen, einen Codeblock anzugeben, der ausgeführt werden soll, wenn die Bedingung wahr ist, und einen anderen Block, der ausgeführt werden soll, wenn die Bedingung falsch ist.

Die grundlegende Syntax einer if-else-Anweisung lautet:

if condition:
    ## Code, der ausgeführt wird, wenn die Bedingung wahr ist
else:
    ## Code, der ausgeführt wird, wenn die Bedingung falsch ist

Ändern wir branching.py, um eine if-else-Anweisung zu verwenden, die basierend auf der Punktzahl Feedback gibt. Ersetzen Sie den aktuellen Inhalt durch Folgendes:

score = 65

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

Speichern Sie die Datei und führen Sie sie aus:

python branching.py

Die Ausgabe wird sein:

Keep trying. You can do better.
End of program.

Da score 65 ist, ist die if-Bedingung (score >= 70) falsch, daher wird der Code im else-Block ausgeführt.

Ändern Sie nun den score zurück auf 85:

score = 85

if score >= 70:
    print("Congratulations! You passed.")
else:
    print("Keep trying. You can do better.")

print("End of program.")

Speichern und führen Sie das Skript aus:

python branching.py

Die Ausgabe wird sein:

Congratulations! You passed.
End of program.

Mit score als 85 ist die if-Bedingung wahr, und der Code im if-Block wird ausgeführt, während der else-Block übersprungen wird.

Die if-else-Anweisung ist unerlässlich, um Programme zu erstellen, die basierend auf einer Bedingung zwei mögliche Ergebnisse verarbeiten können. Denken Sie an die Bedeutung der Einrückung in Python, um die mit if und else verbundenen Codeblöcke zu definieren.

Mehrzweigige Logik mit if-elif-else implementieren

In diesem Schritt lernen wir, wie man Situationen mit mehr als zwei möglichen Ergebnissen mithilfe der if-elif-else-Anweisung handhabt, die eine mehrzweigige Logik bietet.

Die if-elif-else-Struktur wird verwendet, wenn mehrere Bedingungen nacheinander geprüft werden müssen. Das Programm prüft zuerst die if-Bedingung. Wenn diese falsch ist, prüft es die nächste elif (kurz für "else if") Bedingung und so weiter. Wenn keine der if- oder elif-Bedingungen wahr ist, wird der Code im else-Block (falls vorhanden) ausgeführt.

Die grundlegende Syntax lautet:

if condition1:
    ## Code, der ausgeführt wird, wenn condition1 wahr ist
elif condition2:
    ## Code, der ausgeführt wird, wenn condition1 falsch UND condition2 wahr ist
elif condition3:
    ## Code, der ausgeführt wird, wenn condition1 und condition2 falsch UND condition3 wahr ist
## ... weitere elif-Blöcke
else:
    ## Code, der ausgeführt wird, wenn alle Bedingungen falsch sind

Erstellen wir eine neue Python-Datei namens multibranch.py im Verzeichnis ~/project, um dies zu demonstrieren.

cd ~/project
touch multibranch.py

Öffnen Sie multibranch.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu. Dieses Beispiel ermittelt eine Notenbewertung basierend auf einer numerischen Punktzahl.

score = 88

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python multibranch.py

Die Ausgabe wird sein:

Grade: B
Grading complete.

Hier ist der score 88. Die erste Bedingung (score >= 90) ist falsch. Die zweite Bedingung (score >= 80) ist wahr, daher wird der Codeblock unter dem ersten elif ausgeführt, und das Programm überspringt den Rest der elif- und else-Blöcke.

Probieren wir eine andere Punktzahl aus. Ändern Sie multibranch.py zu:

score = 75

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

Speichern und führen Sie das Skript aus:

python multibranch.py

Die Ausgabe wird sein:

Grade: C
Grading complete.

In diesem Fall sind die ersten beiden Bedingungen falsch, aber die dritte Bedingung (score >= 70) ist wahr, daher wird "Grade: C" ausgegeben.

Testen wir schließlich den else-Block. Ändern Sie multibranch.py zu:

score = 55

if score >= 90:
    print("Grade: A")
elif score >= 80:
    print("Grade: B")
elif score >= 70:
    print("Grade: C")
elif score >= 60:
    print("Grade: D")
else:
    print("Grade: F")

print("Grading complete.")

Speichern und führen Sie das Skript aus:

python multibranch.py

Die Ausgabe wird sein:

Grade: F
Grading complete.

Da keine der if- oder elif-Bedingungen wahr ist, wird der Code im else-Block ausgeführt.

Die if-elif-else-Struktur ist sehr leistungsfähig, um mehrere verschiedene Fälle basierend auf unterschiedlichen Bedingungen zu behandeln. Denken Sie daran, dass die Bedingungen in der Reihenfolge geprüft werden und nur der Codeblock für die erste wahre Bedingung ausgeführt wird.

Verschachtelte if-Anweisungen und die pass-Anweisung erkunden

In diesem Schritt werden wir verschachtelte if-Anweisungen untersuchen, bei denen eine if-Anweisung innerhalb einer anderen platziert wird, und auch die pass-Anweisung kennenlernen.

Verschachtelte if-Anweisungen sind nützlich, wenn Sie eine Bedingung prüfen müssen und, wenn diese Bedingung wahr ist, dann eine weitere Bedingung (oder mehrere Bedingungen) prüfen müssen, bevor ein bestimmter Codeblock ausgeführt wird.

Erstellen wir eine neue Python-Datei namens nested_if.py im Verzeichnis ~/project.

cd ~/project
touch nested_if.py

Öffnen Sie nested_if.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu, um verschachtelte if-Anweisungen zu demonstrieren. Dieses Beispiel prüft, ob eine Person aufgrund von Alter und Staatsbürgerschaft wahlberechtigt ist.

age = 20
is_citizen = True

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are also a citizen.")
        print("You are eligible to vote.")
    else:
        print("You are not a citizen.")
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

Speichern Sie die Datei und führen Sie sie im Terminal aus:

python nested_if.py

Die Ausgabe wird sein:

You are old enough to vote.
You are also a citizen.
You are eligible to vote.
Voting eligibility check complete.

Hier ist die äußere if-Bedingung (age >= 18) wahr. Dann ist auch die innere if-Bedingung (is_citizen) wahr, sodass der Code innerhalb des inneren if-Blocks ausgeführt wird.

Ändern wir nun is_citizen zu False:

age = 20
is_citizen = False

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are also a citizen.")
        print("You are eligible to vote.")
    else:
        print("You are not a citizen.")
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

Speichern und führen Sie das Skript aus:

python nested_if.py

Die Ausgabe wird sein:

You are old enough to vote.
You are not a citizen.
You are not eligible to vote.
Voting eligibility check complete.

In diesem Fall ist die äußere if-Bedingung wahr, aber die innere if-Bedingung (is_citizen) ist falsch, sodass der Code im inneren else-Block ausgeführt wird.

Ändern wir schließlich das age auf kleiner als 18:

age = 16
is_citizen = True ## Dieser Wert spielt jetzt keine Rolle

if age >= 18:
    print("You are old enough to vote.")
    if is_citizen:
        print("You are also a citizen.")
        print("You are eligible to vote.")
    else:
        print("You are not a citizen.")
        print("You are not eligible to vote.")
else:
    print("You are not old enough to vote.")
    print("You are not eligible to vote.")

print("Voting eligibility check complete.")

Speichern und führen Sie das Skript aus:

python nested_if.py

Die Ausgabe wird sein:

You are not old enough to vote.
You are not eligible to vote.
Voting eligibility check complete.

Hier ist die äußere if-Bedingung (age >= 18) falsch, sodass der Code im äußeren else-Block ausgeführt wird und die innere if-else-Struktur vollständig übersprungen wird.

Verschachtelte if-Anweisungen können Ihren Code komplexer machen, verwenden Sie sie daher mit Bedacht. Manchmal können logische Operatoren (and, or, not) Bedingungen vereinfachen und Verschachtelungen vermeiden. Zum Beispiel könnte der erste Fall als if age >= 18 and is_citizen: geschrieben werden.

Schauen wir uns nun die pass-Anweisung an. Die pass-Anweisung ist eine Nulloperation; es passiert nichts, wenn sie ausgeführt wird. Sie ist nützlich als Platzhalter, wenn eine Anweisung syntaktisch erforderlich ist, Sie aber keinen Code ausführen möchten.

Sie könnten beispielsweise einen if- oder else-Block haben, dessen Implementierung Sie noch nicht entschieden haben. Die Verwendung von pass verhindert einen Syntaxfehler.

Ändern Sie nested_if.py, um eine pass-Anweisung einzufügen:

age = 17

if age >= 18:
    pass ## Wir haben noch nicht entschieden, was zu tun ist, wenn sie alt genug sind
else:
    print("You are not old enough to vote.")

print("Check complete.")

Speichern und führen Sie das Skript aus:

python nested_if.py

Die Ausgabe wird sein:

You are not old enough to vote.
Check complete.

Da age 17 ist, ist die if-Bedingung falsch und der else-Block wird ausgeführt. Die pass-Anweisung im if-Block tut nichts.

Wenn wir age auf 18 ändern:

age = 18

if age >= 18:
    pass ## Wir haben noch nicht entschieden, was zu tun ist, wenn sie alt genug sind
else:
    print("You are not old enough to vote.")

print("Check complete.")

Speichern und ausführen:

python nested_if.py

Die Ausgabe wird sein:

Check complete.

Die if-Bedingung ist wahr, die pass-Anweisung wird ausgeführt (tut nichts) und der else-Block wird übersprungen.

Die pass-Anweisung ist ein temporärer Platzhalter. In einem echten Programm würden Sie pass durch den tatsächlichen Code ersetzen, den Sie ausführen möchten.

Einführung der match-case-Anweisung (Python 3.10+)

In diesem Schritt werden wir die match-case-Anweisung untersuchen, ein neues Feature, das in Python 3.10 für strukturelles Pattern Matching eingeführt wurde. Dies bietet eine alternative Möglichkeit zur Implementierung mehrzweigiger Logik, ähnlich wie switch-Anweisungen in anderen Programmiersprachen.

Die match-case-Anweisung ermöglicht es Ihnen, einen Wert mit einer Reihe von Mustern zu vergleichen und den Codeblock auszuführen, der mit dem ersten übereinstimmenden Muster verbunden ist.

Die grundlegende Syntax lautet:

match value:
    case pattern1:
        ## Code, der ausgeführt wird, wenn value mit pattern1 übereinstimmt
    case pattern2:
        ## Code, der ausgeführt wird, wenn value mit pattern2 übereinstimmt
    ## ... weitere case-Blöcke
    case _:
        ## Code, der ausgeführt wird, wenn kein Muster übereinstimmt (optionaler Wildcard)

Erstellen wir eine neue Python-Datei namens match_case.py im Verzeichnis ~/project, um dies zu demonstrieren.

cd ~/project
touch match_case.py

Öffnen Sie match_case.py im Editor der WebIDE und fügen Sie den folgenden Code hinzu. Dieses Beispiel gibt den Wochentag basierend auf einer Zahl aus.

day_number = 3

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

Speichern Sie die Datei und führen Sie sie im Terminal mit dem Befehl python aus (der in dieser Umgebung standardmäßig Python 3.10 verwendet):

python match_case.py

Die Ausgabe wird sein:

Wednesday
Day check complete.

Hier ist day_number 3, was mit dem Muster case 3: übereinstimmt, daher wird "Wednesday" ausgegeben.

Probieren wir eine andere Zahl aus. Ändern Sie match_case.py zu:

day_number = 6

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

Speichern und führen Sie das Skript aus:

python match_case.py

Die Ausgabe wird sein:

Saturday
Day check complete.

Der day_number ist 6 und stimmt mit case 6: überein.

Testen wir schließlich den Wildcard-Fall. Ändern Sie match_case.py zu:

day_number = 10

match day_number:
    case 1:
        print("Monday")
    case 2:
        print("Tuesday")
    case 3:
        print("Wednesday")
    case 4:
        print("Thursday")
    case 5:
        print("Friday")
    case 6:
        print("Saturday")
    case 7:
        print("Sunday")
    case _:
        print("Invalid day number")

print("Day check complete.")

Speichern und führen Sie das Skript aus:

python match_case.py

Die Ausgabe wird sein:

Invalid day number
Day check complete.

Da day_number 10 ist und mit keinem der spezifischen Fälle (1 bis 7) übereinstimmt, wird der Wildcard-Fall case _: abgeglichen und "Invalid day number" ausgegeben. Das _ fungiert als Catch-all-Muster.

Die match-case-Anweisung kann eine sauberere und lesbarere Methode sein, um mehrere spezifische Werte zu behandeln, verglichen mit einer langen if-elif-else-Kette, insbesondere beim Abgleich mit konstanten Werten. Sie unterstützt auch komplexere Pattern-Matching-Funktionen, die Sie weiter erforschen können, wenn Sie mehr über Python lernen.

Zusammenfassung

In diesem Lab haben wir zunächst den sequenziellen Programmablauf verstanden, bei dem Anweisungen nacheinander ausgeführt werden. Anschließend haben wir das Konzept der bedingten Logik eingeführt, die es Programmen ermöglicht, Entscheidungen basierend auf Bedingungen zu treffen. Wir haben gelernt, wie man ein- und zweigige Logik mit den if- und if-else-Anweisungen implementiert, was die Ausführung von Code ermöglicht, je nachdem, ob eine Bedingung wahr oder falsch ist.

Wir haben die mehrzweigige Logik mit der if-elif-else-Struktur weiter untersucht, die die sequentielle Überprüfung mehrerer Bedingungen ermöglicht. Wir haben auch verschachtelte if-Anweisungen für komplexere Entscheidungsfindungen und die Verwendung der pass-Anweisung als Platzhalter betrachtet. Schließlich wurden wir mit der match-case-Anweisung (verfügbar ab Python 3.10) als Alternative für mehrwegige Verzweigungen basierend auf Pattern Matching vertraut gemacht.