Bis jetzt haben alle unsere Programme ihre Anweisungen der Reihe nach ausgeführt, ohne irgendwelche Zeilen zu überspringen. Hier ist ein Beispiel; Schritt vor und zurück durch den Code mit den Knöpfen oder den Pfeiltasten auf der Tastatur.
Die neue Möglichkeit in dieser Lektion ist die if-Anweisung, die uns erlaubt, Aktionen nur durchzuführen, wenn bestimmte Bedingungen zutreffen, und ansonsten Zeilen zu überspringen. Ändern wir zum Beispiel unser Programm und geben wir eine extra Nachricht aus, wenn das Alter von einem groß genug ist. Wir werden zwei Zeilen hinzufügen: if age > 65:
(bedeutet, "falls age
größer als 65") und print('Genieße die Rente!')
. Jetzt schrittweise durch den Code:
Beachte, dass die neue print-Aussage übersprungen wurde,weil age
nur 31 war! Was passiert mit genau dem selben Programm, wenn birthYear
auf 1928 geändert wird?
Siehst du den Unterschied? Die untere Version (mit age
85) gab zwei Zeilen aus und übersprang keine. Dies ist genau die Absicht der if-Anweisung: um etwas zu überprüfen (ist
age
größer als 65?) und um bestimmte Aktionen durchzuführen (Ausgabe von Genieße die Rente!
), nur wenn die Überprüfung als richtig gilt.
Wir nennen die Sache, die überprüft wird, condition, und die Aussagen, die davon abhängig sind, ob die Sache als richtig gilt, body. Der body muss eingerückt sein, was heißt, dass extra Leerzeichen am Anfang der Zeile sind (wie im oberen Beispiel). Der body kann eigentlich mehr als eine Anweisung enthalten: um dies zu tun, schreibe mehrere eingerückte Zeilen. Hier ist ein Beispiel:
- Versuche, diesen Code in der Konsole oder im Visualisierer mit Geburtsjahr 1982 laufen zu lassen. Beide der eingerückten Zeilen werden übersprungen.
In der nächsten Übung bitten wir dich, ein kurzes Programm mit Boolean-Vergleichen zu schreiben. Im oberen Beispiel sahen wir bereits, dass "if x > y:
" "falls x
größer als y
" bedeutet. Vielleicht findest du auch die folgenden Operationen nützlich:
if x < y:
heißt "falls x kleiner als y"if x >= y:
heißt "falls x größer oder gleich y"if x <= y:
heißt "falls x kleiner oder gleich y"
Struktur einer if-Anweisung
- Die erste Zeile,
if «condition»:
hat drei Teile: das Wortif
, die«condition»
(auf Deutsch: Bedingung), welche ein True/False-Ausdruck sein muss (mehr darüber unten), und einen Doppelpunkt:
- Dann der body bestehend aus einer oder mehreren eingerückten Zeilen. Die Zahl der Leerzeichen (die Größe der Einrückung) ist egal. Ist sie aber uneinheitlich, wird ein Fehler verursacht, da Python die Größe der Einrückung benutzt, um zu bestimmen, wo der body startet und endet.
Der body einer if-Anweisung ist ein Beispiel eines "Blocks". Blöcke werden später an vielen verschiedenen Stellen benutzt, z.B. bei "for-Schleifen" und der Definition eigener Funktionen. (Bestimmte andere Programmiersprachen geben Blöcke durch geschweifte Klammern
an.){}
Die nächste Übung sind eigentlich 4 Übungen in einer. Du wirst die Zeilen eines Programms arrangieren, um mehrere verschiedene Ergebnisse zu erhalten.
Klicke auf die horizontalen Rahmen, um jeden Teil zu öffnen; du kannst das in beliebiger Reihenfolge machen. Wie gewöhnlich, pack und lass die Zeilen los (drag and drop), um sie neu zu arrangieren.
True, False, und bool
So weit sahen wir im «condition»
-Teil einer if
-Aussage einen einfachen numerischen Vergleich x > y
, der wahr ist, wenn x
größer als y
, und falsch, wenn x
kleiner oder gleich y
. Allgemein werden Ausdrücke, deren Wert entweder wahr oder falsch ist, Boolean genannt (siehe George Boole; auf Deutsch sagt man auch "boolesch"). In Python wird der bool
-Typ benutzt, um Werte von Boolean-Ausdrücken zu repräsentieren. Für diesen Typ existieren nur zwei Werte: True
und False
.
Beachte, dass wenn du in Python die bool
-Werte True
und False
direkt in einem Programm benutzt,
sie mit einem Großbuchstaben anfangen müssen oder du bekommst eine Fehlermeldung.
Boolean-Vergleiche
Die Operatoren >
, <
, <=
, und >=
vergleichen zwei Zahlen und geben einen bool zurück. Hier sind zwei andere Wege um Zahlen zu vergleichen:
x == y
ist der Gleichheitsoperator, er gibtTrue
zurück, fallsx
undy
gleich sindx != y
ist der Ungleichoperator, er gibtTrue
zurück, fallsx
andy
ungleich sind==
und!=
funktionieren auch bei strings und anderen Typen von Daten
(Hier sind zwei Gleichheitszeichen ==
, denn das (nur) eine hat bei x = «expression»
die Bedeutung "weise der Variable x
den Wert von «expression» zu". Die Verwechslung von =
mit ==
ist eine allgemeine Quelle der Bugs.)
Hier ist eine Übung, die eine der neuen Vergleiche beinhalten wird.
Wir haben gerade das Konzept eines Blocks eingeführt (mehrere zusammengruppierte Zeilen mit dem gleichen Faktor an Einrückung).
Du kannst einen Block in einem anderen haben:
if password=='openSesame': print('User logged on.') if hour>17: print('Good evening!') print('Enter a command:')Hier besteht der äußere Block aus 4 Zeilen und der innere Block aus nur einer Zeile:
if password=='openSesame':print('User logged on.')
if hour>17:print('Good evening!')print('Enter a command:')
if
shour>17
false ist (und der innere Block übersprungen wird), wird die Zeile print('Enter a command:')
des äußeren Blocks stets ausgeführt.Jetzt musst du verschachtelte Blöcke verwenden, um einen etwas komplexeren Altersrechner zu programmieren.
Später werden wir in Lektion 9 sehen, dass Situationen mit mehreren Boolean-Überprüfungen vereinfacht werden können, und zwar durch den else
and elif
(else if)-Befehl, sowie mit den Boolean-Operatoren "and", "or" und "not". Im Moment bist du bereit für die nächste Lektion.