Drücken Sie „Enter“, um den Inhalte zu überspringen

Python | Bedingungen und Schleifen

Bedingungen

Wir müssen immer und überall Entscheidungen treffen. Gehe ich links oder rechts herum? Pizza oder Pommes? Cola oder Eistee? Genauso verhält es sich mit Computerprogrammen. Auch hier müssen viele Entscheidungen getroffen werden. Ist der eingegebene Wert kleiner als 0, dann gebe die Meldung „Zahl muss größer als Null sein!“ aus.

Häufig kommt zu einer Bedingung „Wenn … dann …“ noch die Erweiterung „… sonst“ (engl. else) dazu. Trifft die Bedingung zu, dann soll der Computer den „Dann“-Fall ausführen, ansonsten den „Sonst“-Fall.

In der Programmiersprache Python sehen solche IF...THEN...ELSE Bedingungen wie folgt aus:

a = 5
if (a < 3):
    print("Die Zahl muss größer als 3 sein!")
else:
    print("Prima!")

Probiere aus was passiert, wenn du den Wert der Variablen a auf 2 änderst.

Die Bedingung sollte stets in Klammern geschrieben werden. Die Klammern sind in der Programmiersprache Python, anders als beispielsweise in C# oder Java, aber kein Muss; d.h. eine Bedingung darf in Python auch vollständig ohne Klammern geschrieben werden. Zur besseren Übersichtlichkeit sind Klammern jedoch zu empfehlen, weil sie Zugehörigkeiten anzeigen. Das ist immer dann wichtig, wenn gleichzeitig mehrere Bedingungen (Verknüpfungen) abgefragt werden. Eine Bedingung stellt immer einen boolschen Ausdruck dar, der mit „Wahr“ oder „Falsch“, true oder false, beantwortet werden kann. Mit „Und“- oder „Oder“-Verknüpfungen können wir gleichzeitig mehrere Bedingungen abfragen. Oder wir verneinen eine Aussage, wenn wir genau wollen, dass diese Bedingung nicht zutreffen darf. (Wenn der Würfel NICHT die Zahl 1 zeigt, dann ...). Die dafür notwendigen Vergleichsoperatoren haben wir bereits im Abschnitt Grundlagen kennengelernt. So könnten wir abfragen:

a = 3
if ((a >= 0) and (a < 5)):
    print("Prima!")
else:
    print("Die Zahl muss größer oder gleich 0 und kleiner als 5 sein")

Probiere aus was passiert, wenn du den Wert der Variablen a auf 6 änderst.

Bedingungen, die mit einem „Und“-Vergleichsoperator (and) verknüpft sind, müssen immer gleichzeitig zutreffen, damit der ganze Ausdruck „wahr“ wird. Trifft nur eine der Bedingungen zu, ist der Ausdruck „falsch“. Bei „Oder“-Verknüpfungen reicht es aus, wenn eine der Bedingungen zutrifft. Entweder ich bin müde, oder es ist nach 21 Uhr, dann lege ich mich zum schlafen hin (ok, vielleicht auch erst um 22 Uhr oder 23 Uhr ;-)). Hier muss nur eine der beiden Bedingungen zutreffen: Wenn ich müde bin, lege ich mich zum schlafen hin, oder wenn es nach 21 Uhr spät ist.

Etwas komplizierter wird es, wenn wir in einer Bedingung „Und“- und „Oder“-Verknüpfungen miteinander verbinden. Dann ist die richtige Klammersetzung ganz enorm wichtig:

Entweder ich bin müde, oder es ist nach 21 Uhr und am nächsten Tag ist Schule, 
dann lege ich mich zum schlafen hin.

Ausdrücke, die mit „Und“ verknüpft sind, werden bei der Auswertung immer als stärkere Einheit betrachtet, als „Oder“-Verknüpfungen. In dem Beispiel haben wir zwei Bedingungen zu betrachten: Erstens ich bin müde und zweitens es ist nach 21 Uhr und am nächsten Tag ist Schule. Noch stärker als „Und“-verknüpfte Ausdrücke sind Klammern. Mit Klammern könnten wir die Bedingung aus dem Beispiel wie folgt umbauen:

Entweder (ich bin müde, oder es ist nach 21 Uhr) und am nächsten Tag ist Schule, 
dann lege ich mich zum schlafen hin.

Jetzt haben wir zwei andere Bedingungen zu betrachten: Erstens ich bin müde oder es ist nach 21 Uhr und zweitens am nächsten Tag ist Schule. In diesem Fall würde die Bedingung immer nur dann wahr sein, wenn am nächsten Tag Schule wäre. Wäre am nächsten Tag keine Schule und ich würde müde, müsste ich im Stehen schlafen ;-).

Das richtige Einklammern ist ganz wichtig. Fehler im Programm treten sehr häufig an falsch programmierten Bedingungen auf.

Operatoren Teil 3

Um Bedingungen miteinander kombinieren zu können, stellt die Programmiersprache Python drei logische Operatoren bereit:

and „Und“-Verknüpfung (a == 5) and (b == 3)
or „Oder“-Verknüpfung (a == 3) or (b == 7)
not „Nicht“-Verknüpfung not (isSummer)

Codeblöcke

Bei den Bedingungen lernen wir das erste Mal Blöcke kennen. Blöcke sind Codezeilen, die als eigenständige Einheit betrachtet werden müssen. Also Codezeilen, die irgendwie zusammengehören. In der Programmiersprache Python werden Codeblöcke durch Leerzeichen eingerückt; in C-ähnlichen Programmiersprachen wie C, C++, C# oder Java werden diese Codeblöcke mit geschweiften Klammern „eingeklammert“. Codeblöcke bestehen immer aus mindestens einer Zeile. Es ist unter Python-Programmierern üblich, dass zur Einrückung 4 Leerzeichen verwendet werden. Alle Codezeilen eines Codeblocks müssen mit der selben Anzahl an Leerzeichen eingerückt sein.

WICHTIG! Egal, ob du 4, 2 oder 5 Leerzeichen zur Einrückung von Codeblöcken verwendest: Innerhalb des Programmcodes solltest du dies einheitlich verwenden. Andernfalls wird der Programmcode schnell unverständlich. Am besten ist, du verwendest, wie andere Python-Programmierer auch, stets 4 Leerzeichen zur Einrückung.

Wann wir einen Codeblock verwenden, ist immer von der Zeile über dem Codeblock abhängig. In unserem Beispiel hängt der Codeblock print("Die Zahl muss größer als 3 sein!") von der zuvor stehenden Bedingung if (a < 3): ab. Nur wenn diese Bedingung zutrifft, wird der nachfolgende Codeblock ausgeführt. Ansonsten macht der Computer an der nächsten Stelle weiter, die genauso weit eingerückt ist, wie die Zeile mit der Bedingung. In unserem Fall wäre dies die Zeile mit dem „Sonst“-Fall else:. Und auch daran schließt ein Codeblock an, der nur ausgeführt wird, wenn der „Sonst“-Fall eingetreten ist. Codeblöcke werden in der Programmiersprache Python immer durch einen : eingeleitet.

Codeblöcke können beliebig verschachtelt werden:

if (isSummer):
    if (isSunshine and (temperature > 28)):
        goSwimming()

Die Programmiersprache Python erlaubt uns darüber hinaus mehrere Bedingungen nacheinander abzufragen, falls die zuvor abgefragte Bedingung nicht zutreffen sollte:

if (isSpring):
    print("Frühling!")
elif (isSummer):
    print("Sommer!")
elif (isAutumn or isFall):
    if (isAutumn):
        print("Es ist britischer Herbst")
    else:
        print("Es ist amerikanischer Herbst")
elif (isWinter):
    print("Winter!")
else:
    print("Karneval (die fünfte Jahreszeit)!")

Das Schlüsselwort elif steht hierbei für „Else If“.

Schleifen

Es gibt in der Programmierung häufig Situationen, da müssen Dinge mehr als einmal ausgeführt werden. Beispielsweise soll die Liste der noch unbearbeiteten Hausaufgaben auf dem Bildschirm ausgegeben werden. Vor einer gefühlten Ewigkeit, zumindest wenn wir in „Computerjahren“ rechnen, stand in vielen Kindernzimmern ein C64 von der Firma Commodore. Heutige Computer sind viel, viel leistungsfähiger, aber das soll im Moment für uns keine Rolle spielen. Wenn man den C64 eingeschaltet hatte, meldete sich als allererstes ein Basic-Interpreter, also ein Interpreter für die Programmiersprache Basic.

C64

Ein beliebtes, wenn gleich unsinniges, Programmbeispiel war damals, den unter Programmierern bekannten Satz „Hallo Welt“ in einer Endlosschleife auf dem Bildschirm auszugeben. Dazu reichten beim C64 zwei Basic Codezeilen:

10 PRINT "HALLO WELT!"
20 GOTO 10

C64 Basic

In dem Basic-Dialekt des C64s muss jede Codezeile fortlaufend nummeriert sein. Die Codezeile mit der Nummer 10 schreibt den Text Hallo Welt! auf den Bildschirm. Mit dem Befehl in Zeile 20 soll das Programm wieder zurück zur Zeile 10 springen.

Das Programm ist natürlich sinnfrei und vor allem: Es läuft in einer Endlosschleife, also einer Schleife, die niemals endet, außer man bricht das Programm ab oder schaltet den Computer aus. Wir wollen versuchen, Endlosschleifen zu vermeiden. Zumindest wollen wir das solange, wie wir keine Ausstiegsoption aus dieser Schleife programmieren. In dem oben gezeigten Basic-Beispiel gibt es diese Ausstiegsoption nicht. In der Programmierung unterscheiden wir grundsätzlich zwischen drei Arten von Schleifen:

  1. Schleifen mit einer festen Anzahl an Durchläufen
  2. Schleifen, bei denen die Abbruchbedingung zu Beginn des Schleifendurchlaufs geprüft wird
  3. Schleifen, bei denen die Abbruchbedingung am Ende des Schleifendurchlaufs geprüft wird

Schleifen mit einer festen Anzahl an Durchläufen

Solche „Zählschleifen“ (For-Loops) sehen in der Programmiersprache Python wie folgt aus:

for i in range(0, 5):
    print("Hallo Welt!")

Dabei ist die Variable i eine Zählervariable, die mit jedem Schleifendurchlauf um 1 erhöht wird. In unserem Beispiel wird die Schleife genau fünfmal durchlaufen, was wir an der Anweisung range(0,5) sehen können. Die Schleifenvariable i wird hierbei beim ersten Durchlauf den Wert 0 bekommen. Erreicht die Zählvariable den Wert 5 bricht die Schleife ab. Das Ergebnis ist, dass wir den Text Hallo Welt! fünfmal in der Ausgabe sehen.

For-Loop

Mit der „For“-Schleife können wir auch Listen durchlaufen. Wollen wir uns beispielsweise alle Werktage einer Woche ausgeben lassen, könnte dies so aussehen:

werktage = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag"]
for tag in werktage:
    print(tag)

Schleife über Listeneinträge

Schleifen, bei denen die Abbruchbedingung zu Beginn des Schleifendurchlaufs geprüft wird

Schleifen, bei denen die Abbruchbedingung zu Beginn des Schleifendurchlaufs geprüft wird, werden im Allgemeinen immer dann verwendet, wenn beim Einstieg in die Schleife nicht bekannt ist, wie viele Schleifendurchläufe benötigt werden und ob überhaupt welche benötigt werden (engl. Prechecked loop).

Schleifen, bei denen die Abbruchbedingung am Ende des Schleifendurchlaufs geprüft wird

Schleifen, bei denen die Abbruchbedingung am Ende des Schleifendurchlaufs geprüft wird, werden immer dann benötigt, wenn die Schleife auf jeden Fall einmal durchlaufen werden soll, es aber zu Beginn der Schleife nicht bekannt ist, ob mehr als ein Schleifendurchlauf benötigt wird (engl. Postchecked loop).

Hier haben wir in der Programmiersprache Python leider nur die Möglichkeit, eine „Endlosschleife“ zu programmieren, aber wir definieren sofort dabei auch eine Ausstiegsmöglichkeit:

while True:
    macheEtwas()
    if (ausstiegsbedingung == True):
        break

macheWeiter()

Hier lassen wir bewusst die Schleife mit der Anweisung while True: unendlich lange laufen, denn die Abbruchbedingung für die While-Schleife wird nie eintreten; True wird niemals zu False werden. Innerhalb der Schleife prüfen wir aber eine eigene Abbruchbedingung mit if (ausstiegsbedingung == True): und falls diese zutrifft, steigen wir mit dem Befehl break aus der Schleife sofort aus. Das Programm wird daraufhin nach dem Codeblock der Schleife mit dem Aufruf macheWeiter() fortsetzen.

Share This

Share This

Share this post with your friends!