====== if-Selektion ====== Oft sollen gewisse Programmteile nur unter gewissen Bedingungen ausgeführt werden. Das geht in Python durch ''if''-Selektion. Das folgende Programm illustriert die zwei häufigsten Verwendungen der ''if-(-else)''-Selektion. t = inputInt("Gib eine ganze Zahl!") if t >= 100: print("Die eingegebene Zahl ist grösser-gleich 100.") if t < 0: print("Die eingegebene Zahl ist negativ.") else: print("Die eingegebene Zahl ist nicht-negativ.") ''if''-Selektion: Der eingerückte Code-Block (der auch aus mehreren Zeilen bestehen kann) nach der ''if''-Zeile wird ausgeführt, falls die Bedingung zwischen ''if'' und '':'' wahr ist (wenn man die aktuellen Werte der Variablen einsetzt). Wer mag, kann den Doppelpunkt '':'' als ''then'' lesen. ''if''-''else''-Selektion: Der eingerückte Code-Block nach der ''if''-Zeile wird ausgeführt, falls die angegebene Bedingung wahr ist, sonst wird der eingerückte Code-Block nach der Zeile ''else:'' ausgeführt. Einrückungen und Doppelpunkte sind wichtig! Wie bei Schleifen sind sie eine beliebte Fehlerquelle! ''if''-Selektionen können verschachtelt werden: t = inputInt("Wie viele Minuten Tageslicht hattest Du heute bereits?") if t >= 120: print("Gut, deine Augen werden es dir langfristig danken.") else: if t < 0: print("Das kommt mir etwas kurz vor!") else: print("Versuche bitte im eigenen Interesse, noch mindestens %d Minuten Tageslicht abzubekommen." % (120-t)) Quelle: Zwei Stunden Tageslicht pro Tag minimieren laut wissenschaftlicher Studien das Risiko, kurzsichtig zu werden, siehe [[https://www.deutschlandfunkkultur.de/sehstoerung-des-auges-immer-mehr-kinder-werden-kurzsichtig.976.de.html?dram:article_id=499263|Immer mehr Kinder werden kurzsichtig]]. Hier bietet Python auch die Möglichkeit, ''else: if'' zu dem Code-Kunstwort ''elif'' zu verschmelzen: Das folgene Programm leistet dasselbe und ist etwas leichter lesbar - es werden weniger Einrückungen benötigt. t = inputInt("Wie viele Minuten Tageslicht hattest Du heute bereits?") if t >= 120: print("Gut, deine Augen werden es dir langfristig danken.") elif t < 0: print("Das kommt mir etwas kurz vor!") else: print("Versuche bitte im eigenen Interesse, noch mindestens %d Minuten Tageslicht abzubekommen." % (120-t)) Hier sind auch längere Fallunterscheidungen per ''if''-''elif''-''elif''-...-''elif''-''else'' möglich (wobei das ''else'' am Ende immer optional ist). Schreibe ein Programm, das vom Benutzer eine Temperaturangabe einliest und dann mitteilt, ob es ''kalt'' oder ''kühl'' oder ''behaglich'' oder ''warm'' oder ''heiss'' ist. ===== Aufgaben zur if-Selektion ===== Schreibe ein Programm, dass vom Benutzer zwei Zahlen $a$ und $b$ einliest. Zuerst soll ausgegeben werden, wie viele Lösungen die (lineare) Gleichung $aX+b=0$ hat. Danach sollen alle Lösungen angegeben werden. Alle Spezialfälle sind zu behandeln (denke an $0X+1=0$ und $0X+0=0$). Schreibe das entsprechende Programm für quadratische Gleichungen $aX^2+bX+c$. Auch hier sind alle Spezialfälle zu behandeln (etwa $a=0$; $a\not=0$, Diskriminante negativ; etc.)! Statt die Werte vom Benutzer einzulesen, kannst Du das folgende Programmfragment ausbauen: a = 4 b = 2 c = -3 print("Gleichung %.2fX^2%+.2fX%+.2f = 0" % (a,b,c)) # Erklärung: %+f fügt auf jeden Fall ein Vorzeichen hinzu (+ oder -). 2aLM bis hier 22.09.2021 ===== Aufgaben zu for-Schleifen und if-Selektion ===== Schreibe ein Programm, dass alle Teiler einer (am Anfang des Programms definierten) Zahl ausgibt! Ausserdem soll am Ende ausgegeben werden, wie viele Teiler diese Zahl hat. Erinnerung: ''45 % 7'' liefert den Rest bei der Division von 45 durch 7 Schreibe ein Programm, dass alle Primzahlen von 1 bis zu einer gegebenen Zahl (etwa ''n = 100'') ausgibt. Hinweis: Hier führt wohl kein Weg an einer verschachtelten ''for''-Schleife vorbei. Um alle Primzahlen übersichtlich in einer Zeile auszugeben: Baue in der ''for''-Schleife einen String auf, der am Ende ausgegeben wird. Gib die Primzahlen nun zeilenweise aus und schreibe bei jeder Primzahl zwei Informationen hinzu: * Welchen Rest hat sie bei Division durch 4. * Ist sie als Summe zweier Quadratzahlen darstellbar? Wenn ja, gib eine solche Darstellung an. Die Ausgabe könnte wie folgt aussehen: ... 29 | Rest 1 | ja: 29 = 25 + 4 31 | Rest 3 | nein ... Fällt dir etwas auf? [[https://de.wikipedia.org/wiki/Zwei-Quadrate-Satz|Zwei-Quadrate-Satz]] 2aLM und 2dNP bis hier am 29.09.2021, manche an obiger Primzahlliste, andere schon bei Listen oder Modifikation von Listen... ===== Link zur Kursseite ===== [[lehrkraefte:snr:informatik:glf21|Zur Kursseite]]