9: Fälle & Logik

Diese Lektion wird es dir ermöglichen, das komplexe Überprüfen von Fällen wesentlich eleganter zu machen, wobei du nur zwei neue Teile der Python-Sprache verwendest.

  • nach einem if «C» Statement wird ein else Statement nur ausgeführt, wenn C false ist
  • Du kannst Boolesche Bedingungen kombinieren, indem du A and B, A or B, und not A verwendest

else

Eine sehr übliche Aufgabe beim Schreiben von Programmen ist es, dass du einige Bedingungen überprüfen möchtest, und entweder eine bestimmte Handlung ausführen möchtest oder eine andere, abhängig davon, ob die Bedingung wahr ist oder falsch. Früher verlangte eine Übung etwas zu tun, falls age kleiner als 0 war,
etwas anderes, wenn age nicht kleiner als 0 war; der Code war etwa

if age >= 0:  
  print('Du bist nicht unbedingt ein Zeitreisender')
if age < 0:
  print('Du bist ein Zeitreisender')
Jetzt schreiben wir es neu und verwenden else:

Beispiel
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Allgemeiner kannst du auch else mit dem folgenden Paar von Block Statements verwenden:

if «test»:
   «true-body»        # an indented block
else:
   «false-body»       # another indented block
Python beurteilt den Test. Wenn er wahr ist, dann wird der True-Körper ausgeführt, und wenn er falsch ist, wird der False-Body ausgeführt.

Die Philosophie von else

Wir erhalten keine neuen Fähigkeiten durch else, aber es macht Code viel leichter zu lesen, debuggen und zu pflegen. Hier sind zwei Codefragmente, die das gleiche machen.

Version A
if height < 256:
   print('Too short for this ride')
else:
   print('Welcome aboard!')
Version B
if height < 256:
   print('Too short for this ride')
if height >= 256:
   print('Welcome aboard!')

Beide machen das gleiche, und B braucht nicht einmal else. Die meisten Programmierer würden allerdings einig darüber sein, dass A besser ist. So ist es zum Beispiel bei A so, dass das Ändern einer Bedingung (z.B. 128 zu verwenden anstatt von 256) nur eine Änderung des Codes benötigt anstatt zwei. Außerdem kann A sofort verstanden werden von einem menschlichen Leser, im Gegensatz zu B, das darauf überprüft werden muss, ob beide oder keine der Bedingungen wahr sein können.

Programmierübung: Absoluter Wert
Der absolute Wert einer Zahl wird folgendermaßen definiert: für eine Zahl x, die positiv oder null ist, ist der absolute Wert von x genau x. Wenn x hingegen eine negative Zahl ist, ist der absolute Wert von x gleich -x, in anderen Worten der gleiche wie x aber ohne das Minuszeichen. Zum Beispiel ist der absolute Wert von 5 gleich 5, und der absolute Wert von -10 ist 10. Verwende if und else, um ein Programm zu schreiben, das eine ganze Zahl als Input nimmt und ihren absoluten Wert ausgibt.
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Python hat eine eingebaute Funktion abs(x), um den absoluten Wert von x zu berechnen. Die Auswertung der vorangegangenen Übung verhindert, dass du sie jetzt verwenden kannst, aber du wirst sie später verwenden können.

elif

Python führt ein weiteres Schlüsselwort ein, elif, um es einfacher zu machen, mehrere Bedingungen hintereinander zu checken. Die einfachste Form von elif ist die Folgende:

if «test1»:
   «body1»        # runs if test1 is true
elif «test2»:
   «body2»        # runs if test1 is false and test2 is true
Wie du vielleicht schon geraten hast, steht elif kurz für "else if", da es das gleiche ist, wie ein if Statement in einen else Block zu verpacken. Es führt allerdings zu kürzerem Code und weniger eingerückten Zeilen, was dein Programm leichter zu lesen, debuggen und bearbeiten macht. Außerdem kannst du eine beliebige Anzahl von elif Statements am Stück kombinieren und sogar wahlweise ein else Statement ans Ende fügen:

if «test1»:
   «body1»      # runs if test1 is true
elif «test2»:
   «body2»      # runs if test1 is false and test2 is true
elif «test3»:
   «body3»      # runs if test1 & test2 both false and test3 is true
else:         # these last two lines are optional
   «else-body»  # runs if ALL the tests are false
Hier ist ein Beispiel mit elif, welches innerhalb einer Schleife benutzt wird. Kannst du die Ausgabe voraussagen bevor sie läuft?

Programmierübung: First, Second, Third
Die englischen Worte 1st, 2nd, 3rd, 4th, 5th, 6th, 7th, 8th, 9th (also 1stes, 2tes, 3tes etc.) nennt man Numerale. Schreibe ein Programm, das eine Ganzzahl x zwischen 1 und 9 aus dem Input liest. Das Programm sollte das zu x gehörige Numeral ausgeben.
Tipp: Du benötigst keine 9 verschiedenen Fälle; 4 reichen völlig aus.
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Boolesche Operatoren: and, or, not

Du kannst Boolesche Ausdrücke kombinieren, indem du "and", "or", und "not" verwendest, die genauso funktionieren wie in normaler Sprache.

  • Der Ausdruck A and B ist wahr, wenn sowohl A als auch B wahr sind, und falsch, wenn eines der beiden falsch ist. (Zum Beispiel wirst du nass, wenn es regnet und du deinen Schirm vergessen hast.)
  • Der Ausdruck A or B ist wahr, wenn entweder A wahr ist, oder B wahr ist, und falsch, wenn beide falsch sind. (Zum Beispiel ist die Schule geschlossen, wenn es ein gesetzlicher Feiertag ist oder wenn es ein Wochenende ist.)
  • Der Ausdruck not A ist wahr, wenn A falsch ist, und falsch ist, wenn A wahr ist. (Zum Beispiel bist du hungrig, wenn du nicht Mittagessen hattest.)

Hier ist ein Programm, das automatisch alle Möglichkeiten darstellt. Genau wie die 'Multiplikationstabellen', an die du dich noch aus der Grundschulzeit erinnerst, nennt man dies eine Wahrheitstabelle.

Beispiel
Wahrheitstabellen

Als ein Beispiel der Verwendung von and ist hier ein Programm, das Zahlen zu Buchstaben umwandelt, mit einer Fehlerüberprüfung.

Beispiel
Ein Beispiel von and: Zahlen zu Buchstaben umwandeln, mit 1=A, 2=B, etc.
Du kannst die Eingabe für das Programm in die Box unten eingeben.

Programmierübung: 26 Letters
Schreibe ein Programm, welches das Gegenteil des obigen Beispiels ausführt: es sollte ein Zeichen als Input nehmen und die dazugehörige Zahl (zwischen 1 und 26) ausgeben. Dein Programm sollte nur Großbuchstaben annehmen. Zur Fehlerüberprüfung, gib invalid aus, wenn die Eingabe kein Großbuchstabe ist. TippAlternative Methode zum Vergleich von Zeichenketten
Du kannst die Eingabe für das Programm in die Box unten eingeben.

[pyRecall slug="9.demorgan" title="De Morgansche Gesetze" epilogue="Korrekt! Hier ist zum Beispiel eine mögliche Herleitung für diese Lösung. Zuerst stellen wir fest, dass not (A or B) nur dann wahr ist, wenn sowohl A und B falsch sind. Also, beachten wir, dass (not A) and (not B) nur dann wahr ist, wenn sowohl not A als auch not B wahr sind, d.h. wenn sowohl A als auch B falsch sind. Dies ergibt die folgenden Gleichungen:

(not A) and (not B) = not (A or B)
Wenn wir ein not an beide Seiten anlegen, schließen wir

not ((not A) and (not B)) = not (not (A or B))
und beobachten, dass not(not X)) immer gleich X ist, sodass

not ((not A) and (not B)) = not (not (A or B)) = A or B
Diese Art und Weise, einen Booleschen Ausdruck umzuschreiben ist eins der De Morganschen Gesetze."]Welche der folgenden Ausdrücke ist gleich A or B?[/pyRecall]

Operatorrangfolge

Boolesche Operatoren haben genauso eine Operatorrangfolge wie mathematische Operatoren. Diese Reihenfolge ist

NAO: not (höchste Rangordnung), and, or (niedrigste Rangordnung)

so bedeutet zum Beispiel

not x or y and z folgendes: (not x) or (y and z)

Wie schließen diese Lektion mit einer kurzen Frage ab, für die wir diese Fakten verwenden.

Multiple-Choice-Übung: Operatorrangfolge
Was ist der Wert von

A or not B and C
wenn (A, B, C) = (False, True, True)? Tipp
Korrekt! Die Operatorrangfolge macht dies gleichwertig zu
A or ((not B) and C)
wenn wir die Werte austauschen, haben wir
False or ((not True) and True)
und wenn wir jetzt auch noch Schritt für Schritt vereinfachen, haben wir am Ende
False or ((not True) and True)
= False or (False and True)
= False or False
= False
Wenn du diese Aufgabe geschafft hast, bist du bereit für die nächste Lektion!