Kontrollstrukturen
Kontrollstrukturen sorgen für einen geregelten Programmablauf in unserem Python Programm.Zu diesen Strukturen gehören die Schleifen & Bedingungen
Schleifen
Schleifen dienen dazu einen Codeblock mehrfach zu wiederholen. Betrachte nochmal das Beispiel aus dem ersten Teil:
print('Hello World')
print('Hello Homer')
print('Hello Marge')
print('Hello Bart')
Hier wird die gleiche Funktion mehrfach, nur mit anderen Werten aufgerufen. Das geht auch einfacher.
namen = ["World", "Homer", "Marge", "Bart"]
for name in namen:
print("Hello " + name)
Mit der for Schleife iterieren wir über die Liste namen
und weisen den aktuellen Wert der Variable name zu.Der print()
Funktion wird dann ein String übergeben, der sich aus den beiden Teilen „Hello “ und dem namen zusammengesetzt wird.
Du erkennst hier auch, dass ein Codeblock innerhalb der Schleife eingerückt wird, gängig sind vier Leerzeichen oder ein Tab. Du kannst das machen, wie du willst, solltest das aber in deinem Programm überall konsistent halten. Ich verwende hier zwei Leerzeichen, damit die Zeilen nicht zu lang werden.
range()
die range()
Funktion von Python liefert eine Sequenz von Zahlen zwischen einem Anfangs- und einem Endwert. Um z.B. die ersten zehn natürlichen Zahlen auszugeben nimmst du dieses Beispiel
for zahl in range(1,11):
print(zahl)
Beachte, dass du bei range()
den gewünschten Endwert+1 angeben musst. Welchen praktischen Nutzen das hat wirst du später noch sehen. Du kannst optional auch noch eine Schrittweite angeben range(1,11,2)
liefert dir nur die ungeraden Zahlen.
while
Eine weitere Möglickeit ist die while
Schleife:
namen = ["World", "Homer", "Marge", "Bart"]
schleifenzaehler = 0
while schleifenzaehler < len(namen):
print("Hello " + namen[schleifenzaehler])
schleifenzaehler += 1
Bei der while
-Schleife musst du dich selbst darum kümmern, dass du durch die Schleife weiterläufst. Statt schleifenzaehler +=
1 könntest du auch schleifenzaehler = schleifenzaehler +1
schreiben, um die Variable bei jedem Durchlauf zu erhöhen. Dies kann u.U. hilfreich sein, wenn du nur jedes zweite Element einer Liste betrachten möchtest. Die len(
) Funktion liefert die Anzahl der Elemente in der Liste zurück, was die Abbruchbedingung der Schleife bildet (solange schleifenzaehler
kleiner als len(namen)
ist, wird die Schleife abgearbeitet).
Bedingungen
Eine Bedingung dient dazu, den Programmablauf in bestimmten Fällen zu unterbrechen, um in Sonderfällen einen anderen Ablauf anzustossen. Nehmen wir mal an, wir wollen zwischen Marge und Bart eine Trennlinie einziehen:
namen = ["World", "Homer", "Marge", "Bart"]
for name in namen:
print("Hello " + name)
if name == 'Marge':
print('-----------')
print('Das war es')
Wichtig ist hier, dass das if diesselbe Einrückung wie das print()
in der Schleife hat, da es zum Codeblock der Schleife gehört. Das print()
der Trennlinie wird noch eine Ebene weiter eingerückt, das es zum Codeblock des if
gehört. Ein Codeblock endet automatisch, wenn die Einrückung nicht mehr da ist, dadurch wird das letzte print()
erst nach Durchlauf der Schleife ausgeführt.
Ein if erwartet immer einen booleschen Audruck aus. Nur, wenn dieser True
ist, wird der nachfolgende Block ausgeführt.
if else
Häufig kommt es vor, dass man in einem Fall dies tun will, im anderen aber was anderes. Dabei unterstützt uns das else
zahl = 10
if zahl == 10:
print('Monks Lieblingszahl')
else:
print ('Mag Monk nicht so sehr')
Solange zahl
den Wert 10 hat, wird der Codeblock hinter dem if
durchlaufen, in allen anderen Fällen der Block hinter dem else
.
else kannst du mittels elif
auch noch eine Bedingung hinten anstellen.
# coding=utf-8
zahl = 99
if zahl == 100:
print ('Zahl ist einhundert.')
elif zahl > 100:
print('Zahl ist grösser als einhundert.')
else:
print('Zahl ist kleiner als einhundert.')
Da zahl nur drei verschiedene Zustände (gleich 100, größer oder kleiner) wird für jeden Fall etwas ausgegeben.Damit Python Umlaute verarbeiten kann, steht in der ersten Zeile ein Kommentar mit dem wir die Kodierung der Datei auf utf-8 festgelegt wird.
Mehr zu Kommentaren erfährst du im nächsten Teil des Tutorials.
Mit mehreren elif
hintereinander kannst das nachbauen, was in anderen Programmiersprachen mit switch
gelöst wird. Ab Python Version 3.10 wurde mit match
eine ähnliches Konstrukt geschaffen, dass ich in einem separatem Post vorstelle.
name= 'Bart'
if name == 'Marge':
print('Mutter')
elif name == 'Homer':
print('Vater')
elif name =='Bart' :
print('Sohn')
elif name == 'Lisa':
print('Tochter')
elif name == 'Maggie':
print('Baby')
else:
print('unbekannt')
Vergleichsoperatoren
Es gibt mehrere Vergleichsoperatoren, die du sowohl bei while
als auch bei if
einsetzen kannst. Diese Tabelle zeigt dir, wann ein Operator True
zurückliefert.
Operator | Bedingung |
---|---|
e1 == e2 | e1 ist gleich e2 |
e1 > e2 | ist e1 größer als e2 |
e2 < e2 | ist e1 kleiner als e2 |
e1 >= e2 | ist e1 größer oder gleich e2 |
e1 <= e2 | ist e1 kleiner oder gleich e2 |
e1 != e2 | ist e1 nicht gleich e2 |
Bei Strings ist zu beachten, dass dabei der Stringinhalt verglichen wird, nicht wie in anderen Sprachen (z.B. C und Java) die Speicheradressen. Außerdem wird die Klein-/Großschreibung beachtet. 'Hallo' == 'hallo'
liefert False
.
Zu den Vergleichsoperatoren gibt ein Demoprogramm im Repository.
git clone http://git.olli-cloud:3000/raspithek/pythonkurs
Vergleichsoperatoren verknüpfen
Mehrere boolesche Ausdrücke können miteinander verknupft werden. Das Ergebnis jeder Verknüpfung ist entweder True
oder False
.
In Python gibt es folgende boolsche Verknüpfungen
Verknüpfung | Funktion | Beispiel |
---|---|---|
e1 and e2 | liefert True, wenn sowohl e1 als auch e2 True sind | True and True ist True True and False ist False False and True ist False False and False ist False |
e1 or e2 | liefert True, wenn mind. einer von beiden Werten True ist | TRue or True liefert True True or False liefert True False or True liefert True False OR False liefert False |
not e1 | negiert e1 | not True liefert False not False liefert True |
Du kannst mehrere Verknüpfungen hintereinander setzen, allerdings gilt es dabei, wie in der Mathematik (Punkt-Vor-Strich),Vorränge zu beachten. Die Verknüpfungen werden in dieser Reihenfolge gewertet:
not
and
or
NOT
hat eine höhere Priorität als AND
, was selber eine höere Priorität als OR
hat. Falls dich in einem speziellen Fall die Prioritäten stören, kannst du Teilausdrücke einfach klammern.
zahl = 10
if zahl == 10 or zahl == 100 or zahl == 1000:
print('Eine von Monks Lieblingszahlen')
else:
print ('Mag Monk nicht so sehr')
Monk hat mehrere Zahlen, die er bevorzugt, dies wird in der Abfrage oben jetzt berücksichtigt.
Vieles davon ist nicht Python spezifisch, sondern wird von der booleschen Algebra definiert.
Zusammenfassung
Erst durch Schleifen & Bedingungen werden Programme erst mit einer sinnvollen Ablaufsteuerung versehen.
Im nächsten Teil werden wir sehen, wie uns Methoden das Leben vereinfachen und Tipparbeit ersparen.