Wie Computer Bedingungen prüfen und verschiedene Wege einschlagen — sichtbar gemacht mit tausenden bunter Punkte.
„Wenn die Ampel rot zeigt → stehen bleiben. Sonst → gehen." Die Ampel prüft eine Bedingung und führt je nach Ergebnis eine andere Aktion aus — genau wie if / else.
„Wenn es regnet → Schirm. Sonst wenn es kalt ist → Jacke. Sonst → nichts." Mehrere Bedingungen hintereinander — das ist if / elif / else.
„Wenn Leben = 0 → Game Over. Sonst wenn Punkte > 1000 → nächstes Level. Sonst → weiterspielen." Computer treffen Millionen solcher Entscheidungen pro Sekunde.
„Wenn die Entfernung ≤ 1 km → zu Fuß. Sonst wenn ≤ 5 km → Fahrrad. Sonst → Bus." Eine Variable, drei Wege — das ist if / elif / else im Alltag.
Klicke auf eine Karte für mehr Details.
ifFührt einen Block nur aus, wenn die Bedingung wahr ist. Sonst passiert nichts.
entfernung = 2.5 # Kilometer
if entfernung > 2:
print("Nicht zu Fuß gehen.")Wenn entfernung > 2 wahr ist, wird print ausgeführt. Sonst nichts. Das Einrücken zeigt, was zum Block gehört.if / elseZwei Wege: einer wird immer ausgeführt — entweder der if-Block oder der else-Block.
entfernung = 2.5
if entfernung <= 2:
print("Du gehst zu Fuß.")
else:
print("Fahrrad oder Bus.")Genau einer der beiden Blöcke läuft durch — nie beide, nie keiner.if / elif / elseMehrere Bedingungen hintereinander — der erste wahre Zweig wird ausgeführt.
entfernung = 2.5
if entfernung <= 1:
print("Du gehst zu Fuß.")
elif entfernung <= 5:
print("Du fährst Fahrrad.")
else:
print("Du fährst Bus.")elif = „else if" = „sonst wenn". Beliebig viele davon möglich.Bedingungen bestehen aus Vergleichen — das Ergebnis ist immer wahr oder falsch.
| Operator | Bedeutung | Beispiel |
|---|---|---|
== | gleich | entfernung == 0 |
!= | ungleich | entfernung != 0 |
> | größer als | entfernung > 2 |
< | kleiner als | entfernung < 1 |
>= | größer gleich | entfernung >= 5 |
<= | kleiner gleich | entfernung <= 2 |
= vs. === speichert einen Wert in eine Variable — wie eine Box befüllen.== vergleicht zwei Werte — wie eine Waage abwiegen.
Im if immer == verwenden!
Genau ein Zweig wird ausgeführt — nie beide, nie keiner (bei if/else).
if entfernung <= 1:← Bedingung mit Doppelpunkt print("Du gehst zu Fuß.")← wahr-Zweig (4 Leerzeichen!)elif entfernung <= 5:← weitere Bedingung print("Du fährst Fahrrad.")← elif-Zweigelse:← kein eigener Ausdruck print("Du fährst Bus.")← falsch-ZweigVon der Ampel zur Punktewolke — wir erkunden if/else mit interaktiven Beispielen.
if / else — Die AmpelDie Schildkröte schreibt „STOP!" wenn color == "red" — sonst „GO!".
clear("lightgrey")Löscht den Canvas und setzt die Hintergrundfarbe auf hellgrau.setFontSize(20)Setzt die Schriftgröße für label().setColor(color)Setzt Stift- und Füllfarbe. Wir übergeben eine Variable — die Farbe kommt aus color.label("STOP!")Schreibt Text an die aktuelle Position der Schildkröte.color =
← Wert wählen, dann ↺ + ▶
from gturtle import * makeTurtle() clear("lightgrey") hideTurtle() setFontSize(20) color = "red" setColor(color) if color == "red": label("STOP!") else: label("GO!")
Was gibt das Programm aus, wenn du color = "blue" setzt? Begründe deine Antwort, bevor du es ausprobierst.
if / elif / else — Drei AmpelzuständeJetzt kommt elif dazu: gelb bedeutet „SLOW!". Probiere alle drei Zustände direkt aus:
elif color == "yellow":„Sonst wenn" — wird nur geprüft, wenn das erste if falsch war.color =
← Wert wählen, dann ↺ + ▶
from gturtle import * makeTurtle() clear("lightgrey") hideTurtle() setFontSize(20) color = "red" setColor(color) if color == "red": label("STOP!") elif color == "yellow": label("SLOW!") else: label("GO!")
Füge einen weiteren elif-Zweig hinzu: Wenn color == "orange", soll „CAUTION!" ausgegeben werden. Wo genau fügst du ihn ein?
random kennenlernen — Punkte überallBevor wir Bedingungen mit Punkten kombinieren, lernen wir randint kennen. Es erzeugt zufällige ganze Zahlen. Wir streuen 5000 Punkte — noch ohne Farbbedingung, alle gleich schwarz.
from random import randintLädt die Zufallsfunktion. Danach steht randint(a, b) zur Verfügung.randint(-200, 200)Gibt eine zufällige ganze Zahl zwischen −200 und 200 zurück — jedes Mal neu.setPos(x, y)Setzt die Schildkröte direkt an Position (x, y) ohne eine Linie zu zeichnen.dot(3)Zeichnet einen gefüllten Punkt (Durchmesser 3 Pixel) an der aktuellen Position.from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) setPos(x, y) dot(3)
Verändere randint(-200, 200) auf randint(-100, 100). Was passiert mit dem Muster? Warum sind die Punkte jetzt nicht mehr gleichmäßig verteilt?
if x > 0Jetzt kommt if/else ins Spiel: Liegt der Punkt rechts (x > 0) → rot. Links → blau. Die Bedingung teilt das Quadrat genau in der Mitte.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if x > 0: setPenColor("red") else: setPenColor("blue") setPos(x, y) dot(3)
Ändere if x > 0 auf if x > 80. Was verändert sich am Muster? Wie groß ist jetzt der rote Bereich im Vergleich zum blauen?
if y > 0Dieselbe Idee — jetzt prüfen wir die y-Koordinate. Oben → grün, unten → orange.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if y > 0: setPenColor("green") else: setPenColor("orange") setPos(x, y) dot(3)
Was passiert, wenn du if y > 0 auf if y > x änderst? Skizziere das erwartete Muster auf Papier — dann überprüfen.
Ändere die Bedingung so, dass nur ein vertikaler Streifen in der Mitte farbig wird — alle Punkte mit -20 < x < 20 in rot, alle anderen in blau. Tipp: Du brauchst and um zwei Bedingungen zu kombinieren.
if x > -20 and x < 20:if y > xWir vergleichen x und y miteinander. Die Trennlinie ist die Diagonale y = x — alle Punkte darüber werden blau, alle darunter rot.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if y > x: setPenColor("blue") else: setPenColor("red") setPos(x, y) dot(3)
if y > -xDie andere Diagonale: von unten-links nach oben-rechts. Das Muster sieht ähnlich aus wie in L6, aber um 90° gedreht.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if y > -x: setPenColor("teal") else: setPenColor("orange") setPos(x, y) dot(3)
if / elif / else mit andMit and können wir zwei Bedingungen gleichzeitig prüfen. So entstehen vier Bereiche — die vier Quadranten des Koordinatensystems.
if A and B:Beide Bedingungen müssen wahr sein. x > 0 and y > 0 = rechts UND oben.from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if x > 0 and y > 0: setPenColor("red") elif x < 0 and y > 0: setPenColor("blue") elif x < 0 and y < 0: setPenColor("green") else: setPenColor("orange") setPos(x, y) dot(3)
Tausche die Farben so, dass gegenüberliegende Quadranten dieselbe Farbe haben (wie ein Schachbrett). Welche zwei Bedingungen müssen jeweils dieselbe Farbe bekommen?
Wir nutzen beide Diagonalen gleichzeitig. Das teilt das Quadrat in vier Dreiecke — oben, unten, links, rechts. Das Ergebnis sieht aus wie eine Raute.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if y > x and y > -x: setPenColor("blue") elif y < x and y < -x: setPenColor("red") elif x < 0: setPenColor("green") else: setPenColor("yellow") setPos(x, y) dot(3)
x*x + y*y < 130*130Aus dem Matheunterricht: Der Abstand eines Punktes vom Ursprung ist √(x²+y²). Ein Punkt liegt innerhalb eines Kreises mit Radius r, wenn gilt: x*x + y*y < r*r.
from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if x*x + y*y < 130*130: setPenColor("teal") else: setPenColor("blue") setPos(x, y) dot(3)
Ändere 130*130 auf verschiedene Werte (z.B. 80*80 oder 180*180). Welcher Radius füllt ungefähr die Hälfte des Quadrats?
%Der Operator % gibt den Rest einer Division zurück. x % 80 ist immer zwischen 0 und 79. Mit if x % 80 < 40 entsteht alle 80 Pixel ein Streifenwechsel.
x % 80Rest von x ÷ 80. Beispiel: 100 % 80 = 20, weil 80 einmal passt, Rest 20.from gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) if x % 80 < 40: setPenColor("blue") else: setPenColor("yellow") setPos(x, y) dot(3)
Ändere x % 80 auf y % 80. Was passiert? Versuche anschließend, durch gleichzeitige Verwendung von x und y horizontale UND vertikale Streifen zu erzeugen.
Das Schachbrettmuster entsteht durch Kombination von x- und y-Streifen. Wir berechnen die „Feldnummer" in x- und y-Richtung und prüfen, ob die Summe gerade oder ungerade ist.
# + 200 verschiebt -200..200 nach 0..400sx = (x + 200) // 80 # // = ganzzahlige Division← Welches Feld in x?sy = (y + 200) // 80← Welches Feld in y?if (sx + sy) % 2 == 0:← gerade Summe → eine Farbeelse:← ungerade → andere Farbefrom gturtle import * from random import randint makeTurtle() speed(-1) hideTurtle() repeat 5000: x = randint(-200, 200) y = randint(-200, 200) sx = (x + 200) // 80 sy = (y + 200) // 80 if (sx + sy) % 2 == 0: setPenColor("black") else: setPenColor("red") setPos(x, y) dot(3)
Ändere 80 auf 50. Wie viele Felder entstehen jetzt? Versuche auch ein 4-Farben-Schachbrett: ersetze % 2 durch % 4 und verwende elif für 4 Farben.
Bringe die Zeilen eines if/elif/else-Blocks in die richtige Reihenfolge.
setPenColor("red")elif x < 0 and y > 0:if x > 0 and y > 0:else: setPenColor("green") setPenColor("blue")Fülle die Lücken: Ein Programm, das Punkte innerhalb eines Kreises (r=100) grün färbt, alle anderen rot.
| from gturtle import * |
| from random import randint |
| makeTurtle() |
| speed(-1) |
| hideTurtle() |
| repeat 5000: |
| x = (-200, 200) |
| y = randint(-200, 200) |
| if x*x + y*y 10000: |
| setPenColor() |
| else: |
| setPenColor() |
Klicke auf eine Aussage — stimmt sie oder nicht?
else braucht eine eigene Bedingung in Klammern."else hat keine eigene Bedingung — es gilt für alle Fälle, die kein vorheriges if/elif erfüllt haben.== und = bedeuten dasselbe."= ist eine Zuweisung (speichert). == ist ein Vergleich (prüft). Häufiger Fehler!if/else wird immer genau ein Zweig ausgeführt."if ohne else.if-Blöcken ist nur für die Übersichtlichkeit."elif-Zweige schreiben."x > 0 and y > 0 ist wahr, wenn nur x > 0 gilt."and verlangt, dass beide Bedingungen wahr sind. Nur eine reicht nicht.7 % 3 zurück?color = "blue"?if color == "red": label("STOP!") else: label("GO!")if/else ausgeführt?x*x + y*y < 130*130 geometrisch?if-Block?Klicke auf eine Karte, um die Definition zu sehen.
= (Zuweisung)!10 % 3 = 1 (3×3=9, Rest 1).random. Gibt eine zufällige ganze Zahl zwischen zwei Grenzen zurück.dot(3) = Durchmesser 3 Pixel.Öffne webtigerjython.ethz.ch und schreibe ein Programm mit 5000 Zufallspunkten, das ein eigenes Muster erzeugt — kombiniere mindestens zwei Bedingungen mit and. Notiere: Welche Bedingung du verwendet hast und was das Muster bedeutet.
Beschreibe drei Alltagssituationen als if/elif/else-Struktur auf Deutsch — nicht als Code. Mindestens ein elif-Fall pro Situation. Beispiel: Welche Kleidung ziehst du an (abhängig von Temperatur und Regen)?
„Jede Entscheidung, die ein Computer trifft, steckt als if/else im Code."
if gäbe — was könnten Programme dann noch tun?