Level 01: Bedingungen

Level 1: Wenn das so ist, möchte ich das gar nicht wissen… #

Lass uns nochmal einen Blick auf unser 42-er Programm werfen:

# Hier wird begrüßt
name = input('Wie heißt Du? ')
print('Hallo', name)

# Jetzt fragen wir nach dem Alter und rechnen die Wartezeit aus
alter = input('Wie alt bist du? ')
zeit_bis_42 = 42 - int(alter)

# Schließlich geben wir einen informativen Satz aus
print(name + ' muss noch ' + str(zeit_bis_42) + ' Jahre warten.')

Was passiert eigentlich, wenn jemand, die oder der schon älter als 42 ist, unser Programm verwendet? Das probieren wir einmal aus:

Wie heißt Du? Tante Marga
Hallo Tante Marga
Wie alt bist du? 52
Tante Marga muss noch -10 Jahre warten.

Mmh… das scheint unsinnig zu sein! Wenn Tante Marga das beste Progammiererinnenalter schon um zehn Jahre überschritten hat, ergibt die Aussage, sie müsse »noch -10 Jahre warten« keinen Sinn! Außerdem: was macht Tante Marga eigentlich an meinem Computer?

Wir sollten das Programm verbessern:

  1. Die Wartezeit sollte nur ausgegeben werden, wenn es sie tatsächlich gibt.
  2. Wenn jemand 42 ist, sollte sie oder er auf das beste Alter für Programmierer_innen hingewiesen werden.
  3. Und für ältere Menschen fällt uns auch noch etwas ein.

Wie kann mein Programm wissen, ob jemand 42 ist? (Wahrheitswerte) #

Du hast bereits gelernt, dass das = nichts mit dem mathematischen \(=\) zu tun hat. Es gibt aber in Python (und auch in eigentlich allen anderen Progammiersprachen) die Möglichkeit, etwas auf Gleichheit zu prüfen – das entspricht dann schon eher dem mathematischen \(=\) ! Der Gleichheits-Operator besteht aus zwei Zeichen und sieht so aus: ==

Wir testen ihn im REPL:

>>> alter = 13
>>> alter == 13
True
>>> alter == 42
False

True und False sind so genannte Wahrheitswerte. True steht für wahr (hättest du das gewusst?) und False steht für falsch. (Außer diesen beiden gibt es übrigens keine anderen – merke sie dir gut!)

Der Unterschied zum mathematischen \(=\) ist der, dass das == prüft, wobei noch nicht feststeht, ob Gleichheit besteht, und \(=\) Gleichheit behauptet.

Praktischerweise gibt es weitere Zeichen (auch »Operatoren« genannt), die solche Verhältnisse prüfen. Du kannst dir sicher vorstellen, wofür < und > stehen? Probieren wir’s aus! (Die Variable alter muss weiterhin im Speicher vorhanden sein.)

>>> alter > 5
True
>>> alter > 18
False

In natürliche Sprache ließe sich dieser Dialog vielleicht so übersetzen (etwas künstlerisch ausgestaltet):

Mensch: Bist du schon älter als 5?
Computer: Ja, das ist wahr! Ich bin älter als 5!
Mensch: Bist du auch schon älter als 18?
Computer: Nein, das ist falsch. Ich bin jünger als 18.

Diese Prüfungen lassen sich (im Gegensatz zur Zuweisung mit = nun auch seitenverkehrt aufschreiben:

>>> 5 < alter
True
>>> 18 < alter
False

George Boole hat schon wie ein Computer gerechnet, als die noch gar nicht erfunden waren

Hinweis zur Einordnung

Auch wenn es nur zwei Wahrheitswerte (True und False) gibt, haben diese beiden einen eigenen Typ. Der Typ heißt boolean und ist damit nach dem englischen Philosophen und Mathematiker George Boole benannt. (Warum das so ist, kannst du bei Gelegenheit einmal in wikipedia nachlesen.) Dies bekommst du auch heraus, wenn du Python danach fragst:

>>> type(True)
<class 'bool'>

Wenn alter noch als Variable im Speicher liegt, kannst du auch sehen, dass bei den Vergleichen ein Ergebnis vom Typ bool herauskommt (hier wäre der Wert False):

>>> alter = 13
>>> type(alter < 18)
<class 'bool'>

Schließlich lässt sich das Ergebnis von Vergleichen (also ein Wahrheitswert) wieder in einer Variablen abspeichern:

>>> ist_älter_als_5 = alter > 5

Ein solche Variable lässt sich dann an anderer Stelle wieder auslesen:

>>> ist_älter_als_5
True
>>> type(ist_älter_als_5)
<class 'bool'>

Neben den drei Zeichen, die du gerade kennengelernt hast, gibt es noch weitere Operatoren. In der Tabelle findest du alle Vergleichsoperatoren:

Operator Bedeutung
a == b Ist a gleich b?
a != b Ist a ungleich b?
a < b Ist a kleiner als b?
a > b Ist a größer als b?
a <= b Ist a kleiner oder gleich b?
a >= b Ist a größer oder gleich b?

Die Variablen a und b können vom Typ int sein (auch andere Zahlentypen sind möglich – die lernen wir später noch kennen), aber auch vom Typ str. In jedem Fall müssen aber beide Variablen den gleichen Typ haben. Bei Vergleichen von Zeichenketten (str) werden Zeichen, die eher im Alphabet drankommen, als kleiner angesehen.

Was lässt sich nun mit diesem Wissen anfangen? (Kontrollstruktur if) #

Dass Computerprogramme so scheinen, als ob sie auf etwas reagieren könnten, hängt damit zusammen, dass sie auf Eingaben in bestimmter Weise reagieren. In den allermeisten Fällen ist diese Reaktion das Ergebnis einer kleineren oder größeren Menge von Regeln, die im Computerprogramm aufgeschrieben sind. Ein ganz wesentliches Element zum Aufschreiben dieser Regeln wirst du jetzt kennenlernen.

In natürlicher Sprache könnte eine Regel z.B. heißen:

Wenn du 18 oder älter bist, darfst du bei der Stadtratswahl mit abstimmen.

Für solche Fälle verwendet Python das Schlüsselwort if. Im Code sieht das dann so aus:

# Zuvor wird irgendwann das Alter abgefragt…
# Für das Beispiel wird es hier festgelegt:
alter = 19

if alter >= 18:
    print('Folgende Kandidat_innen stehen zur Wahl:')
    # Hier geht es weiter; und es darf abgestimmt werden.

Nur wenn das Alter (in der Variable alter) größer oder gleich 18 ist, werden die Kandidaten überhaupt vorgestellt. Dass die Zeile mit den Kandidaten (print('Folgende Kandidaten…) ausgeführt werden darf, merkt Python an der Einrückung. Diese soll genau vier Leerzeichen betragen.

In Python kommt es auf die Leerzeichen an

Hinweis zur Einordnung

Durch die Einrückungen entstehen sichtbare Blöcke im Programmcode, und das ist auch beabsichtigt. Andere Programmiersprachen (C, Java, Javascript, …) bilden solche Abschnitte mit geschweiften Klammern ({}) und Semikolons (;) – beides braucht Python nicht.

Programmierer:innen anderer Programmiersprachen (C, Java, Javascript, …) rücken Sinnabschnitte im Code ein, damit sie einen guten Überblick haben. In Python bedeuten solche Einrückungen bereits die Struktur, dafür dürfen sie dann aber auch nicht weggelassen werden.

Zwar wären auch andere Abstände (z.B. nur drei Leerzeichen) möglich, oder sogar Tabulatoren (Brrrrrr…). Damit andere Python-Programmier_innen dich als einen der ihren erkennen, solltest du dich an die vier-Leerzeichen-Regel halten…

Nach dem Schlüsselwort if (und irgendetwas, was einen Wahrheitswert ergibt, und einem Doppelpunkt :) folgt also ein eingerückter Block, der nur dann ausgeführt wird, wenn der Wahrheitswert nach dem if dem Wert True entsprach. Ist der Wert hingegen False, wird der ganze Block übersprungen.

Damit können wir versuchen, unser 42er- Programm zu erweitern. Erinnerst du dich noch?

  1. Die Wartezeit sollte nur ausgegeben werden, wenn es sie tatsächlich gibt.
  2. Wenn jemand 42 ist, sollte sie oder er auf das beste Alter für Programmierer_innen hingewiesen werden.
  3. Und für ältere Menschen fällt uns auch noch etwas ein.

Dafür schreiben wir nun drei Bedingungen, nachdem das Alter eingegeben und ausgerechnet wurde:

# Hier wird begrüßt
name = input('Wie heißt Du? ')
print('Hallo', name)

# Jetzt fragen wir nach dem Alter und rechnen die Wartezeit aus
alter = input('Wie alt bist du? ')
zeit_bis_42 = 42 - int(alter)

# Hierher kommen unsere Bedingungen:
if zeit_bis_42 > 0:
    print(name + ' muss noch ' + str(zeit_bis_42) + ' Jahre warten.')
if zeit_bis_42 == 0:
    print(name + ' ist im besten Programmier_innenalter!')
if zeit_bis_42 < 0:
    pass

Bitte weitergehen! Hier gibt es nichts zu sehen!

Hinweis zur Einordnung

pass ist übrigens die Anweisung an den Computer, gar nichts zu tun. Wenn an irgendeiner Stelle im Code noch etwas geschrieben werden soll, wozu gerade vielleicht keine Zeit ist, kannst du pass verwenden, und später Code ergänzen. Übersetzen ließe es sich vielleicht mit »Hier gibt es nichts zu sehen! Gehen Sie bitte weiter!«.

Lass das Programm laufen, und teste es mit verschiedenen Altersangaben. Läuft alles wie gewünscht? Herzlichen Glückwunsch!

Übung #

Du hast sicher eine gute Lösung für das Tore-Programm von David gefunden… wenigstens war er ganz begeistert! Nun hat er sogar noch einen weiteren Auftrag für dich:

Hey, das war wirklich Klasse, wie du mich gerettet hast! Seitdem ist mir keine einzige peinliche Ansage mehr durchgerutscht! Du, sag mal… manchmal vergesse ich, wie aufregend Fußballspiele sind, in denen fünf Tore oder mehr fallen. Könnte das Programm mich nicht irgendwie darauf hinweisen?

Bekommst du es hin? Die verbesserte Version sieht bei dir vielleicht auch in etwa so aus:

tore_heim = input('Wie viele Tore erzielte die Heimmannschaft? ')
tore_ausw = input('Wie viele Tore erzielte die Auswärtsmannschaft? ')

tore_insgesamt = int(tore_heim) + int(tore_ausw)

print('Es wurden insgesamt ' + str(tore_insgesamt) + ' Tore erzielt.')

# Wenn mehr als fünf Tore gefallen sind, soll der Satz ausgegeben werden:
# 'Das war eine aufregende und torreiche Partie!'

Du hast alle nötigen Werkzeuge in deinem Programmier-Werkzeugkasten. Erweitere das Programm für David!

Lösungsvorschlag
tore_heim = input('Wie viele Tore erzielte die Heimmannschaft? ')
tore_ausw = input('Wie viele Tore erzielte die Auswärtsmannschaft? ')

tore_insgesamt = int(tore_heim) + int(tore_ausw)

print('Es wurden insgesamt ' + str(tore_insgesamt) + ' Tore erzielt.')

# Wenn mehr als fünf Tore gefallen sind, soll der Satz ausgegeben werden:
# 'Das war eine aufregende und torreiche Partie!'
if tore_insgesamt > 5:
    print('Das war eine aufregende und torreiche Partie!')

Zurück Weiter