Python: Ablaufstrukturen

Willemers Informatik-Ecke


Bestellen bei Amazon
2015-07-31

Diese Seiten sind Grundlage meines Python-Buchs aus den ersten Recherchen.

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.

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. and ist nur dann wahr, wenn die damit verbundenen Ausdrücke wahr sind. or ist wahr, wenn mindestens einer der damit verbundenen Ausdrücke wahr ist. not kehrt den Wahrheitswert in sein Gegenteil.

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 not: Umkehrung des Wahrheitswertes
and Und: Beide Bedingungen müssen zutreffen
or Oder: Mindestens eine Bedingung muss zutreffen
True wahr
False falsch

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 nemmer != 0:
    quotient = zaehler / nemmer
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 eingabezahl:
        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.

Um die Werte von 1 bis 10 einfacher zu erstellen, hilft die Funktion range. Sie liefert als Ergebnis eine Liste von Werten, die ihr als Parameter übergeben 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.

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.


Homepage (C) Copyright 2014, 2015 Arnold Willemer