Python: Schleifen & Bedingungen

Kontrollstrukturen

Kontrollstrukturen sorgen für einen geregelten Programmablauf in unserem Python Programm.Zu diesen Strukturen gehören die Schleifen & Bedingungen

Python Logo (CC-BY-SA The people from the Tango! project / Wikipedia)
Python Logo (CC-BY-SA The people from the Tango! project / Wikipedia)

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.

OperatorBedingung
e1 == e2e1 ist gleich e2
e1 > e2ist e1 größer als e2
e2 < e2ist e1 kleiner als e2
e1 >= e2ist e1 größer oder gleich e2
e1 <= e2ist e1 kleiner oder gleich e2
e1 != e2ist 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üpfungFunktionBeispiel
e1 and e2liefert True, wenn sowohl e1 als auch e2 True sindTrue and True ist True
True and False ist False
False and True ist False
False and False ist False
e1 or e2liefert True, wenn mind. einer von beiden Werten True istTRue or True liefert True
True or False liefert True
False or True liefert True
False OR False liefert False
not e1negiert e1not 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:

  1. not
  2. and
  3. 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.

Schreibe einen Kommentar

Creative Commons License
Except where otherwise noted, the content on this site is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.
Olli Graf - raspithek.de
WordPress Cookie Hinweis von Real Cookie Banner