Python: Ablaufstrukturen
Willemers Informatik-Ecke
Variablen und Zuweisungen Arrays und Listen

Abfrage if

Ein Programm muss auf Bedingungen reagieren können. So sollte beispielsweise eine Division durch 0 tunlichst vermieden werden. Python bietet für diese Zwecke den Befehl if an.

Der Befehl if gefolgt von einer Bedingung und einem Doppelpunkt leitet eine Abfrage ein. Nur wenn die Bedingung zutrifft, werden die Befehle ausgeführt, die ab der nächsten Zeile eingerückt folgen. Dabei bleiben alle folgenden Befehle unter der Bedingung, solange die Einrückung in der gleichen Tiefe eingehalten wird.

if nenner != 0:
    quotient = zaehler / nenner
Das Beispiel fragt die Variable nenner ab. Das Ausrufezeichen hat bei Vergleichen einen negierenden Charakter. Damit steht die Kombination != für ungleich. Nur wenn die Variable nenner ungleich 0 ist, wird die Division durchgeführt.

Operatoren für Bedingungen

!= ungleich
== gleich
< kleiner
> größer
<= kleiner oder gleich
>= größer oder gleich

Auch Zeichenketten können auf Gleichheit verglichen werden. Mit Größer- und Kleinerzeichen können Sie auch die alphabetische Reihenfolge ermitteln, also Zeichenketten vergleichen. Allerdings wird die Reihenfolge durch die interne Zeichenkodierung bestimmt. Nach dieser sind Großbuchstaben kleiner als Kleinbuchstaben, sodass überraschenderweise Zitrone vor ananas einsortiert wird.

Für Zeichenketten gibt es mit in eine besonderen Operator, der prüft, ob eine Zeichenkette in einer anderen Zeichenkette enthalten ist.

if "sen" in Name:
    print("Norddeutscher Adel")
Mit den Booleschen Verknüpfungen and, or und not stehen weitere Elemente zur Verfügung.

Bedingungen können zwar nur wahr (True) oder falsch (False) sein. Dennoch kann man das Ergebnis eines booleschen Ausdrucks in einer Variablen speichern. Als Literale werden beispielsweise für die Initialisierung die Schlüsselwörter True und False verwendet.

not Nicht: Umkehrung des Wahrheitswertes
and Und: Beide Bedingungen müssen zutreffen
or Oder: Mindestens eine Bedingung muss zutreffen
True wahr
False falsch

Nicht nur True, sondern alle Werte ungleich 0 werden als True betrachtet. Dagegen werden None, die leere Liste [], das leere Tupel () oder 0 als False behandelt.

Bei Prüfung von and und or wird die Auswertung abgebrochen, sobald das Ergebnis sich nicht mehr ändern kann. Bei and wird beim ersten falschen Ausdruck der Gesamtausdruck False. Bei or wird beim ersten wahren Ausdruck der Gesamtausdruck True. Man spricht auch vom logischen Kurzschluss.

Andernfalls

An den Befehl if kann hinter die eingerückten Zeilen der Befehl else gesetzt werden. Dieser behandelt dann den umgekehrten Fall. Beispielsweise könnte er eine Fehlermeldung ausgeben und die Variable auf 0 setzen.
if nenner != 0:
    quotient = zaehler / nenner
else:
    print("Division durch 0!")
    quotient = 0
In manchen Fällen gibt es aber mehr als zwei Fälle, beispielsweise, wenn ein Fahrstuhl für jedes Stockwerk einen anderen Text ausgeben soll. Oder wenn Sie untersuchen wollen, ob eine Zahl positiv, negativ oder 0 ist. Das könnten Sie einfach realisieren, in dem Sie hinter dem Befehl else ein neues if aufsetzen.
if x>0:
   print("Die Zahl ist positiv")
else
   if x==0:
       print("Die Zahl ist 0")
   else:
       print("Die Zahl ist negativ")
Python stellt aber eine Kombination von else und if in Form des Befehls elif zur Verfügung. Das erspart das sehr weite Einrücken, das bei einem Fahrstuhl mit 50 Stockwerken erforderlich wäre.
if x>0:
   print("Die Zahl ist positiv")
elif x==0:
   print("Die Zahl ist 0")
else:
   print("Die Zahl ist negativ")

Der Befehl pass

Der Befehl pass tut nichts und kann darum sehr gut eingesetzt werden, wenn eine Einrückung erforderlich ist, aber die Implementierung noch fehlt.
if x==0:
    pass

Schleifen

Manche Dinge wiederholen sich. Solche Dinge sind aus Sicht eines Python-Programms eine Schleife.

while

Die Schleife mit dem Befehl while wird so lange durchlaufen, wie die Bedingung der Schleife erfüllt ist.

Eine der einfachsten Wiederholungen ist das Zählen. Man addiert auf eine Variable immer wieder den Wert 1 hinzu, solange diese unter dem Endwert liegt. Wir lassen Python bis 10 zählen.

i = 0
while i<10:
    i = i + 1
    print(i)
Am Anfang der Schleife wird die Schleifenbedingung geprüft. Ist diese erfüllt, werden die eingerückten Befehle durchlaufen und dann wieder an den Schleifenkopf gesprungen.

Im Beispiel ist die Variable i zunächst 0. Das ist kleiner als 10, also werden die eingerückten Befehle ausgeführt. Zunächst wird der bisherige Wert von i mit 1 addiert und das Ergebnis wieder i zugewiesen. Dadurch ist der Inhalt von i nun 1. Dieser Wert wird über die Funktion print() ausgegeben. Der Weg führt wieder zum Schleifenkopf. Da 1 immer noch kleiner als 10 ist, wiederholen sich die eingerückten Zeilen.

Irgendwann ist die Variable i endlich 10 und damit nicht mehr kleiner als 10. Die Schleife wird verlassen. Und da nichts weiter folgt, auch das Programm.

Eingabeprüfung
Andere Anwendungen einer Schleife sind die Wiederholung der Eingabe, bis sie den Programmanforderungen genügen. Die folgende Schleife wiederholt sich, bis die Eingabe ein Zahlenwert ist, der zur Anforderung des Programms passt.

Eine unterhaltsamere Variante ist das Spiel zum Raten von Zahlen. Der Computer denkt sich eine Zahl zwischen 1 und 100 und Sie müssen raten, welche es ist.

#!/usr/bin/python
zahl = 42
eingabe = -1
while eingabe!=zahl:
    eingabe = input()
    if eingabe<zahl:
        print("zu klein")
    elif eingabe>zahl:
        print("zu gross")
    else:
        print("gewonnen")
Falls Ihnen das Raten der Zahl 42 nicht spannend genug ist, bauen Sie doch eine Zufallszahl ein.

for

Python bietet Ihnen neben while eine weitere Schleife mit dem Befehl for an. Hier wird allerdings nicht wieder eine Bedingung abgefragt. Stattdessen weist der Befehl for einer Variablen nacheinander verschiedene Werte zu, die er aus einer Liste entnimmt.

Wir greifen noch einmal die Idee des Zählens von 1 bis 10 auf. Das sähe bei einer for-Schleife so aus:

for i in 1, 2, 3, 4, 5, 6, 7, 8, 9, 10:
    print(i)
Der eingerückte Teil wird in der Schleife wiederholt. Bei jedem Durchgang erhält die Variable i den nächsten Wert der Liste. Das sieht zugegebenermaßen eher albern aus. Aber Sie werden noch sehen, dass oftmals Strukturen auszuwerten sind, die viele Werte enthalten. Und da wird sich die for-Schleife noch als sehr nützlich erweisen.

Der Bereich: range

Um die Werte von 1 bis 10 einfacher zu erstellen, hilft die Funktion range. Sie liefert als Ergebnis eine Liste von Werten, die durch die Parameter beschrieben werden.
for i in range(1,11,1):
    print(i)
Die Parameter von range() geben den Startwert, den ersten nicht mehr zur Liste gehörigen Wert und die Schrittweite an. Wenn der dritte Parameter wie in diesem Fall 1 ist, kann er weggelassen werden.
for i in range(1,11):
    print(i)
Wird range nur ein Wert übergeben, wird die Anfangszahl auf 0 gesetzt. Das ist aus vielen Gründen praktischer als die 1. Nur beim menschlichen Zählen ist es etwas ungewohnt. Aber das kann man ja bei der Ausgabe korrigieren.
for i in range(10):
    print(i+1)

range ist aus Sicht von Python ein eigener Typ. Die Abfrage durch type ergibt den Typ range, wie dieser Screenshot vom Interpreter zeigt:

>>> type(range(1,11))
<class 'range'>

Schleifenbruch mit continue und break

while-Schleifen laufen solange, wie die Schleifenbedingung erfüllt ist und for-Schleifen, solange noch Elemente in der Liste vorliegen.

Manchmal ist es aber erforderlich, dass eine Schleife abgebrochen werden soll, weil ein bestimmtes Ereignis eingetreten ist. Dafür gibt es den Befehl break. Wird er mitten in einer Schleife aufgerufen, wird die Schleife sofort verlassen.

In anderen Fällen führt eine Situation dazu, dass nur die aktuelle Runde der Schleife nicht weitergeführt werden soll, aber die Schleife durchaus fortgesetzt werden muss. Dann ruft man den Befehl continue.

Beide Befehle haben den Nachteil, dass sie ein Ende der Schleife bewirken, ohne dass dies im Schleifenkopf erkennbar ist. Darum sollte man beide Befehle mit Zurückhaltung verwenden.

Video