Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:snr:informatik:glf22:python:if-else [2022/09/12 16:17] – [Aufgabe zu if-else mit logischen Verknüpfungen: Schaltjahr] Olaf Schnürer | lehrkraefte:snr:informatik:glf22:python:if-else [2022/12/01 17:39] (current) – [Bonus-Material] Olaf Schnürer | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ~~NOTOC~~ | ||
| + | |||
| + | ====== if-(else-)statements ====== | ||
| + | <WRAP center round box> | ||
| + | Unsere bisherigen Python-Programme werden beim Ausführen von vorne beginnend Zeile für Zeile abgearbeitet. | ||
| + | |||
| + | Oft sollen gewisse Programmteile aber nur unter gewissen Bedingungen ausgeführt werden. Das geht in Python durch sogenannte // | ||
| + | </ | ||
| + | |||
| + | ===== Erklärvideo zu if-statements und if-else-statements ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schau dir das folgende Video zu if- und if-else-statements an. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | <hidden Endzustand des Programms aus dem Video> | ||
| + | <code python tageslicht.py> | ||
| + | t = int(input(" | ||
| + | |||
| + | if t >= 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | Hintergrundinformation: | ||
| + | </ | ||
| + | |||
| + | ===== Wesentliche Punkte aus dem Video ===== | ||
| + | |||
| + | <WRAP round info> | ||
| + | '' | ||
| + | |||
| + | '' | ||
| + | |||
| + | Danach geht es jeweils mit dem normal eingerückten Code weiter. | ||
| + | </ | ||
| + | |||
| + | <WRAP center round important> | ||
| + | Einrückungen sind äusserst wichtig in Python! Beachte, dass im Programm aus dem Video drei Zeilen um genau 4 Leerschläge eingerückt sind. | ||
| + | |||
| + | In der Standard-Einstellung von Visual Studio Code kannst du solche Einrückungen (um Vielfache von 4) leicht mit '' | ||
| + | |||
| + | Neben falschen Einrückungen sind auch vergessene Doppelpunkte eine beliebte Fehlerquelle. | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe zu if-else ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | (1) Schreibe ein Quiz-Programm mit mindestens zwei Quiz-Fragen deiner Wahl (möglichst einmal mit Eingabe einer Zahl und einmal mit Eingabe eines Strings).< | ||
| + | |||
| + | (2) Definiere am Anfang des Programms eine Variable durch '' | ||
| + | |||
| + | (3) Teste dein Programm! | ||
| + | |||
| + | <hidden Lösungsvorschlag:> | ||
| + | <code python> | ||
| + | richtigeAntworten = 0 | ||
| + | |||
| + | antwort = input(" | ||
| + | if (antwort == "St. Gallen" | ||
| + | print(" | ||
| + | richtigeAntworten = richtigeAntworten + 1 | ||
| + | else: | ||
| + | print(" | ||
| + | print(" | ||
| + | |||
| + | antwort2 = int(input(" | ||
| + | if antwort2 == 76000: | ||
| + | print(" | ||
| + | richtigeAntworten = richtigeAntworten + 1 | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe zu if-else mit logischen Verknüpfungen: | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | ACHTUNG: Die Aufgabe ist von der Logik her relativ kompliziert; | ||
| + | |||
| + | Ist eine Jahreszahl durch 4 teilbar, so handelt es sich um ein Schaltjahr, es sei denn, die Jahreszahl ist durch 100, aber nicht durch 400 teilbar. | ||
| + | |||
| + | (Diese komplizerte Regel sorgt grob gesagt dafür, dass die Frühlingstagundnachtgleiche immer am selben Tag des Kalenderjahres stattfindet, | ||
| + | |||
| + | Ersetze die Fragezeichen im folgenden Python-Programm durch einen booleschen Ausdruck, so dass es korrekt ausgibt, ob die Eingabe ein Schaltjahr ist oder nicht. Teste deine Vermutung durch Eingabe der Jahreszahlen 7, 32, 300, 400. | ||
| + | |||
| + | <code python schaltjahr.py> | ||
| + | jahr = int(input(" | ||
| + | |||
| + | if ????: | ||
| + | print(str(jahr) + " ist kein Schaltjahr." | ||
| + | else: | ||
| + | print(str(jahr) + " ist ein Schaltjahr." | ||
| + | </ | ||
| + | |||
| + | <hidden Nullter Hinweis> | ||
| + | Erinnerung: | ||
| + | * Das Rechenzeichen '' | ||
| + | * Das Vergleichszeichen '' | ||
| + | * ... und dann gibt es noch die logischen Verknüpfungen '' | ||
| + | </ | ||
| + | |||
| + | <hidden Erster Hinweis:> | ||
| + | Eine Jahreszahl steht genau dann für KEIN Schaltjahr, wenn sie (nicht durch 4 teilbar ist) oder (durch 100 teilbar und nicht durch 400 teilbar ist). | ||
| + | </ | ||
| + | |||
| + | <hidden Zweiter Hinweis:> | ||
| + | Der gesuchte boolesche Ausdruck hat die Form | ||
| + | <code python> | ||
| + | (jahr % 4 ? 0) ? ((jahr % 100 ? 0) ? (jahr % 400 ? 0)) | ||
| + | </ | ||
| + | wobei die Fragezeichen durch Vergleichszeichen und logische Verknüpfungen zu ersetzen sind. | ||
| + | </ | ||
| + | |||
| + | <hidden Lösungsvorschlag:> | ||
| + | <code python> | ||
| + | | ||
| + | Auf Grund der " | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== if-(else-)-statements sind Kontrollstrukturen ===== | ||
| + | |||
| + | <WRAP center round info> | ||
| + | If-statements und if-else-statements stellen eine wichtige [[https:// | ||
| + | |||
| + | Sie kontrollieren bzw. steuern den Ablauf eines Programms. | ||
| + | |||
| + | Bald werden wir noch die Kontrollstrukturen // | ||
| + | |||
| + | Bereits kennengelernt haben wir die " | ||
| + | </ | ||
| + | |||
| + | ===== Zur Terminologie ===== | ||
| + | |||
| + | <WRAP center round box> | ||
| + | Ich verwende hier die Begriffe // | ||
| + | |||
| + | Verbreitet (aber meiner Meinung nach weniger einprägsam) sind auch die folgenden Bezeichnungen: | ||
| + | * //bedingte Anweisung// statt // | ||
| + | * // | ||
| + | * // | ||
| + | * if-(else-)Anweisung statt if-(else-)statement; | ||
| + | * etc. | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Erklärvideo zu verschachtelten if-else-statements ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schau dir das folgende Video an. | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | Zustände des Programms aus dem Video: | ||
| + | <hidden (1) mit verschachtelten if-statements:> | ||
| + | <code python tageslicht-verschachtelt.py> | ||
| + | t = int(input(" | ||
| + | |||
| + | if t >= 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | else: | ||
| + | if t < 0: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | <hidden (2) dasselbe verkürzt mit " | ||
| + | <code python tageslicht-elif.py> | ||
| + | t = int(input(" | ||
| + | |||
| + | if t >= 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | elif t < 0: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | <hidden (3) mit verfeinerter Fallunterscheidung> | ||
| + | <code python tageslicht-elif-verfeinert.py> | ||
| + | t = int(input(" | ||
| + | |||
| + | if t >= 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | elif t < 0: | ||
| + | print(" | ||
| + | elif t > 90: | ||
| + | print(" | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | <hidden (4) dasselbe nur mit if; möglich, aber nicht empfohlen und fehleranfälliger> | ||
| + | <code python tageslicht-naiv-per-if.py> | ||
| + | t = int(input(" | ||
| + | |||
| + | if t >= 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | if t < 0: | ||
| + | print(" | ||
| + | if t > 90 and t < 120: | ||
| + | print(" | ||
| + | print(" | ||
| + | if 0 <= t <= 90: | ||
| + | print(" | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Aufgabe zu if-else-Verschachtelung und elif ===== | ||
| + | |||
| + | |||
| + | <WRAP round todo> | ||
| + | (1) Schreibe ein Programm | ||
| + | * mit // | ||
| + | das vom Benutzer eine Temperaturangabe einliest und dann mitteilt, ob es '' | ||
| + | |||
| + | Bemerkung: Es gibt viele Möglichkeiten der Verschachtelung. Wenn du willst, kannst du mehrere finden. | ||
| + | |||
| + | (2) Ändere dein Programm nun so, dass du alle '' | ||
| + | |||
| + | (3) Teste dein Programm: Für jeden Temperaturbereich ist mindestens ein Test durchzuführen. | ||
| + | |||
| + | <hidden Lösungsvorschlag mit verschachtelten if-else-statements (drei Varianten in einem Programm)> | ||
| + | <code python temperatur-verschachtelt.py> | ||
| + | temperatur = int(input(" | ||
| + | |||
| + | # Es gibt viele Möglichkeiten, | ||
| + | # unterschiedlich elegant (bzw. sogar recht chaotisch) | ||
| + | # wirken. Ich gebe drei relativ systematische Möglichkeiten an: | ||
| + | |||
| + | # 1. Möglichkeit (von oben her Rantasten): | ||
| + | |||
| + | if temperatur >= 35: | ||
| + | print(" | ||
| + | else: | ||
| + | if temperatur >= 25: | ||
| + | print(" | ||
| + | else: | ||
| + | if temperatur >= 15: | ||
| + | print(" | ||
| + | else: | ||
| + | if temperatur >= 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | # 2. Möglichkeit (etwa in der Mitte spalten): | ||
| + | |||
| + | if temperatur < 15: | ||
| + | if temperatur < 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | if temperatur < 35: | ||
| + | if temperatur < 25: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | # 3. Möglichkeit (wohl nicht so naheliegend): | ||
| + | |||
| + | if temperatur < 35: | ||
| + | if temperatur < 25: | ||
| + | if temperatur < 15: | ||
| + | if temperatur < 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | <hidden ... und nun mit allen else+if zu elif verschmolzen> | ||
| + | <code python temperatur-mit-elif> | ||
| + | temperatur = int(input(" | ||
| + | |||
| + | # 1. Möglichkeit, | ||
| + | |||
| + | if temperatur >= 35: | ||
| + | print(" | ||
| + | elif temperatur >= 25: | ||
| + | print(" | ||
| + | elif temperatur >= 15: | ||
| + | print(" | ||
| + | elif temperatur >= 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | # 2. Möglichkeit, | ||
| + | |||
| + | if temperatur < 15: | ||
| + | if temperatur < 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | elif temperatur < 35: | ||
| + | if temperatur < 25: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | |||
| + | # 3. Möglichkeit, | ||
| + | |||
| + | if temperatur < 35: | ||
| + | if temperatur < 25: | ||
| + | if temperatur < 15: | ||
| + | if temperatur < 5: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== Aufgabe: Lineare Gleichungen (in Standardform) vom Computer lösen lassen ===== | ||
| + | |||
| + | <WRAP round todo> | ||
| + | (1) Schreibe ein Programm, dass vom Benutzer zwei Zahlen $a$ und $b$ einliest. Das Programm soll ausgegeben, wie viele Lösungen die lineare Gleichung $ax+b=0$ hat. Danach sollen alle Lösungen ausgegeben werden. | ||
| + | |||
| + | Alle Spezialfälle sind zu behandeln (denke an Fälle wie $0X+2=0$ und $0X+0=0$). | ||
| + | |||
| + | <hidden Hinweis, falls dir die Mathematik Probleme macht:> | ||
| + | Die Fallunterscheidung in der Mathematik (und dann auch in deinem Python-Programm) geht so: | ||
| + | * Im Fall $a \not=0$ hat die Gleichung genau eine Lösung, nämlich $x=-\frac{b}{a}$. | ||
| + | * Sonst (also im Fall $a=0$) gilt: (Die Gleichung hat dann die Gestalt $0x+b=0$.) | ||
| + | * Im Fall $b\not= 0$ hat die Gleichung keine Lösung, also Lösungsmenge $\mathbb{L} = \emptyset$. | ||
| + | * Sonst (also im Fall $b = 0$) hat die Gleichung jede reelle Zahl als Lösung, also Lösungsmenge $\mathbb{L} = \mathbb{R}$. | ||
| + | Als Ausgabe musst du nicht diese mathematischen Symbole verwenden, sondern kannst einfach die Lösungsmenge per Text beschreiben. | ||
| + | </ | ||
| + | |||
| + | ---- | ||
| + | |||
| + | (2) Teste dein Programm! | ||
| + | |||
| + | <hidden Lösungsvorschlag> | ||
| + | <code python lineare-gleichung-loesen.py> | ||
| + | print(" | ||
| + | a = int(input(" | ||
| + | b = int(input(" | ||
| + | |||
| + | if a != 0: | ||
| + | print(" | ||
| + | elif b!= 0: | ||
| + | print(" | ||
| + | else: | ||
| + | print(" | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ===== Bonus-Material ===== | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Schau, was du auf | ||
| + | |||
| + | https:// | ||
| + | |||
| + | zusätzlich zu if-statements lernen kannst. (Fehlt hier etwas Wichtiges?) | ||
| + | |||
| + | Dort kannst du auch viele Beispiele direkt im Browser ausprobieren. Finde heraus, wie das geht! | ||
| + | |||
| + | Bearbeite die Übungen am Ende der Seite. | ||
| + | </ | ||
| + | |||
| + | <WRAP center round todo> | ||
| + | Stell dir selbst ein Problem, das du mit den bereits vorhandenen Programmierkenntnissen lösen kannst. | ||
| + | |||
| + | Wenn du es mir mitteilst und es mir gefällt, nehme ich es gerne (je nach Wunsch mit oder ohne Angabe des Autors bzw. der Autorin) in diesen Kurs auf! | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Link zur Kursseite ===== | ||
| + | |||
| + | [[lehrkraefte: | ||
| + | |||