====== Selektion: if, if/else, if/elif/else ====== Programme sollen auf unterschiedliche Eingaben oder Zustände unterschiedliche reagieren können. Dies wird mit ''if'' und Konsorten erreicht. Kopieren, testen und verstehen Sie folgenden Code: # Ganze Zahl einlesen zahl = inputInt("Bitte eine Ganzzahl:") # Der Abstand um das '>'-Zeichen ist optional # Der Doppelpunkt am Ende der if-Zeile muss stehen # Danach wird der Code eingerückt. if zahl > 10: print("Ihre Zahl ist grösser als 10") print("Wird nur ausgegeben, wenn die Zahl grösser als 10 ist...") print("Das wird immer ausgegeben, weil nicht mehr eingerückt und damit nicht mehr im 'if' drin.") Nach ''if'' folgt eine **Bedingung**, die ''True'' oder ''False'' ergibt. Bedingungen sind meist Vergleiche: * ''=='': Gleichheit. //Achtung: Das einfache ''='' ist eine Zuweisung und sollte im ''if'' nicht verwendet werden.// * ''!='' Ungleichheit. * ''<'', ''<='', ''>='', ''>'': Kleiner, kleiner gleich, grösser gleich, grösser. Bedingungen können negiert und verknüpft werden: * ''not'': Negation. Z.B. ist ''if a!=b:'' das Gleiche wie ''if not (a==b):'' * ''and'': Logisch und. Ergibt genau dann ''True'', wenn beide Bedingungen ''True'' sind. Z.B. ''if a==b and b==c:'' * ''or'': Logisch oder. Ergibt genau dann ''True'', wenn eine der beiden oder beide Bedingungen wahr sind. Z.B. ''if a==b or b==c:'' True oder False? Bei den letzen beiden Aufgaben **nicht rechnen**, sondern überlegen! True|False True|False True|False True|False True|False Mit ''else'' kann ein Code-Block begonnen werden, der ausgeführt wird, wenn das vorhergehende Code-Block im ''if'' nicht ausgeführt wurde. a = 4 if a<3: print("a ist kleiner als 3") else: print("a ist nicht kleiner als 3") Es ist auch möglich, mit ''elif'' noch weitere Bedingungen zu testen und ein ''else'' am Schluss anzufügen, das ausgeführt wird, wenn alle vorhergehenden Bedingungen falsch waren. name = "Python" if name=="Python": print("Hallo Schlange!") elif name=="Monty": print("Da fehlt doch Python!") else: print("No comment") Schreiben Sie ein Programm, das eine Aussentemperatur einliest und dann die Temperatur in Worten ausgibt, z.B. "kalt", "warm", "heiss" oder mehr Abstufungen. Beispiel einer Ausgabe -8°C ist kalt. Schreiben die ein Programm, das die allgemeine lineare Gleichung $ax + b = 0$ löst. Das Programm soll die Koeffizienten $a$ und $b$ einlesen und die Lösung ausgeben. Behandeln Sie auch den Spezialfall, wenn $a=0$ ist. Schreiben Sie ein Programm, das die quadratische Gleichung $ax^2+bx+c=0$ löst. Die Koeffizienten $a$, $b$ und $c$ sollen am Anfang direkt im Programmcode definiert werden. Unterscheiden Sie dazu die unterschiedlichen Fälle, die auftreten können und melden Sie die Anzahl der Lösungen und die Lösungen selbst. Starten Sie Ihr Programm wie folgt: # Definition der Koeffizienten in einer Zeile, durch Kommas getrennt. a,b,c = 4,2,-3 print("Gleichung %.2fx^2%+.2fx%+.2f = 0" % (a,b,c)) # %+f fügt auf jeden Fall ein Vorzeichen hinzu (+ oder -). Beispiel-Ausgaben: Gleichung 4.00x^2+2.00x-3.00 = 0 Zwei Lösungen x1=-1.151388 und x2=0.651388 Gleichung 1.00x^2+2.00x+1.00 = 0 Genau eine Lösung x=-1.000000 Gleichung 1.00x^2+2.00x+3.00 = 0 Keine reelle Lösung Gleichung 0.00x^2+1.00x+2.00 = 0 Lineare Gleichung, eine Lösung: x=-2.000000 Gleichung 0.00x^2+0.00x+1.00 = 0 Falsche Aussage, keine Lösung Gleichung 0.00x^2+0.00x+0.00 = 0 Wahre Aussage, L=R, jedes x ist Lösung Der **Modulo-Operator** ''%'' haben wir bereits bei Strings für die formatierte Ausgabe angetroffen. Werden Zahlen mit ''%'' verknüpft, erhält man den Rest der Division. Z.B. * ''12 % 5'' ergibt 2 (weil der Rest 2 bei der Division von 10 durch 5 bleibt). * ''14 % 2'' ergibt 0 (weil die Division von 14 durch 2 aufgeht). * ''if a % 7 == 0:'' Überprüft, ob a durch 7 teilbar ist (d.h. den Rest 0 ergibt). **FIZZ BUZZ!** Programmieren Sie ein Programm, das alle Zahlen von 1 bis 100 ausgibt, aber alle jene, die durch 3 teilbar sind durch ''fizz'' ersetzt, jene, die durch 5 teilbar sind durch ''buzz'' ersetzt und jene, die sowohl durch 3 als auch durch 5 teilbar sind durch ''fizz buzz'' ersetzt. 1 2 fizz 4 buzz fizz 7 8 fizz buzz 11 fizz 13 14 fizz buzz 16 17 fizz 19 buzz fizz 22 23 fizz buzz 26 fizz 28 29 fizz buzz ===== Optionale, weitere Aufgaben ===== * Geben Sie alle Teiler einer Zahl aus. * Geben Sie die Primfaktorzerlegung einer Zahl aus. * Bestimmen Sie, ob eine gegebene Zahl eine Primazahl ist oder nicht. * Geben Sie die Primzahlen der Reihe nach aufsteigend aus. ===== Lösungsvorschläge ===== for i in range(1,101): if i % 3 == 0 and i % 5 == 0: print("fizz buzz") elif i % 3 == 0: print("fizz") elif i % 5 == 0: print("buzz") else: print(i) t = inputInt("Temperatur in Grad Celsius") text = "%d°C ist " % t if (t<15): text += "kalt" # eine Abkürzung für text = text + "kalt" elif t<25: text += "warm" else: text += "heiss" print(text+".") # Definition der Koeffizienten a,b,c = 0,0,0 print("Gleichung %.2fx^2%+.2fx%+.2f = 0" % (a,b,c)) if a==0: # Lineare Gleichung if b==0: # Gleichung ohne x if c==0: print("Wahre Aussage, L=R, jedes x ist Lösung") else: print("Falsche Aussage, keine Lösung") else: print("Lineare Gleichung, eine Lösung: x=%f" % (-c/b)) else: # Quadratische Gleichung d = b*b-4*a*c # Diskriminante if (d<0): print("Keine reelle Lösung") elif d==0: print("Genau eine Lösung x=%f" % (-b/(2*a))) else: d = d**0.5 # Wurzel aus der Diskriminante x1 = (-b-d)/(2*a) x2 = (-b+d)/(2*a) print("Zwei Lösungen x1=%f und x2=%f" % (x1, x2))