At My Fingertips
Rapid Playground
Lerne nun, das Konzept der Verzweigungen auch für die Grafikkomposition zu nutzen!
Den Code unten kennst du bereits. Führst du ihn aus, wird ein Raster aus blauen Punkten ausgegeben.
Passe den Code mithilfe einer if-else
-Verzweigung so an, dass folgendes Raster ausgegeben wird:
a) blau-rotes Punkte-Raster, spaltenweise
b) blau-rotes Punkte-Raster, zeilenweise
c) blau-rotes Punkte-Raster, spalten- und zeilenweise
Übrigens, aber wirklich nur für diejenigen, die den Mount-Everest der Programmierkunst besteigen wollen, ...
...diese vier Rastervariationen (und weitere) lassen sich mit nur einer einzigen Funktion (siehe unten) umsetzen!
punkte_raster_generisch
handelt es sich um eine sog. Funktion höherer Ordnung, also eine Funktion, die eine oder mehrere Funktionen als Parameter akzeptiert und/oder eine Funktion als Rückgabewert liefert.
In diesem speziellen Fall akzeptiert die Funktion punkte_raster_generisch
eine Funktion faerber
als Parameter. Diese Funktion faerber
erwartet zwei Parameter vom Typ int
und gibt einen Wert vom Typ Farbe
zurück. Durch die Übergabe dieser Funktion als Parameter ermöglicht punkte_raster_generisch
eine flexible Anpassung des Verhaltens, indem es der Aufruferin/dem Aufrufer erlaubt, eine spezifische Farbgebungsfunktion zu definieren, die dann auf jeden Punkt im Raster angewendet wird. Bei den Aufrufen von punkte_raster_generisch
wird die spezifische Farbgebungsfunktion jeweils als sog. Lambda-Funktion definiert und als Argument faerber
an punkte_raster_generisch
übergeben. Im Lambda-Ausdruck lambda z, s: blau if (s+z) % 2 == 0 else rot
(zitiert aus dem vierten Aufruf) wird für jede Koordinate (z, s) überprüft, ob die Summe von z und s gerade ist. Wenn die Summe gerade ist, wird die Farbe blau
zurückgegeben, andernfalls wird die Farbe rot
zurückgegeben. Lambda-Ausdrücke sind ein mächtiges Werkzeug in der Programmierung, das es ermöglicht, anonyme (sprich: unbenannte) Funktionen auf eine kompakte und prägnante Weise zu definieren. Im Gegensatz zu benannten Funktionen benötigen Lambda-Ausdrücke keine separate Definition, sondern können direkt an Stellen verwendet werden, an denen Funktionen benötigt werden, wie z.B. als Argumente für Funktionen höherer Ordnung.Das hat soweit gut geklappt für zweifarbige Muster. Was aber, wenn man mehr als zwei Bedingungen prüfen lassen möchte?
In Python und vielen anderen Programmiersprachen ermöglicht die if-elif-else
-Verzweigung die Überprüfung mehrerer unabhängiger Bedingungen nacheinander. elif
steht dabei für else if, also sonst wenn. Die Bedingungen werden von oben nach unten überprüft, und der Block, der zuerst die wahre Bedingung enthält, wird ausgeführt. Die verbleibenden Bedingungen werden nicht mehr geprüft. Wenn keine der Bedingungen zutrifft, wird der else
-Block ausgeführt.
Studiere das kurze Programm in der Codezelle unten sowie und die beiden nachfolgenden Flussdiagramme. Beantworte auch die jeweils zugehörigen Fragen.
f
im print
-Argumentf
am Anfang des Strings, welcher der print
Funktion übergeben wird, zeigt an, dass es sich um einen sogenannten "formatierten String" handelt. Das bedeutet, dass die Platzhalter in geschweiften Klammern durch die angegebenen Werte ersetzt werden, wenn der Text auf der Konsole ausgegeben wird.if
-Bedingung nicht wahr ist (was hier der Fall ist, da punktzahl
10 ist), wird die elif
-Bedingung punktzahl >= 70
überprüft, d.h., es wird geprüft, ob punktzahl
grössergleich 70 ist. Wenn diese Bedingung wahr ist (was hier auch nicht zutrifft), wird der dazugehörige Codeblock ausgeführt, andernfalls wird der eingerückte Block übersprungen und das Programm auf der nicht eingerückten Programmzeile weiter ausgeführt.punktzahl >= 70
ist False
, da punktzahl
10 und somit kleiner als 70 ist.if
- und elif
-Anweisungen werden nacheinander geprüft. Sobald eine Bedingung als wahr erkannt wird, wird der dazugehörige Codeblock ausgeführt. Daher ist es in diesem Fall nicht notwendig, die genaue obere Grenze (in diesem Fall 90) in der elif
-Bedingung zu überprüfen, da diese bereits durch die vorherige Bedingung (in diesem Fall punktzahl >= 90
) abgedeckt wird. Das spart nicht nur Schreibarbeit, sondern macht den Code auch lesbarer und weniger fehleranfällig.if-elif-else
-Verzweigung wird verwendet, um Werte in verschiedene Kategorien zu klassifizieren, während mehrere if
-Anweisungen unabhängige Bedingungen nacheinander prüfen. Die Entscheidung, welche Konstruktion zu verwenden ist, sollte auf der spezifischen Logik des Problems basieren, wobei die Struktur der Bedingungen und die Anforderungen der Kategorisierung berücksichtigt werden müssen.Aufgaben
a) (Einzelarbeit) Verwende die if-elif-else
-Verzweigung, um deine eigene Version einer Blumenwiese zu kreieren. Lass deiner Kreativität freien Lauf! ABER: Achte darauf, dass deine Partnerin/dein Partner hierbei deinen Bildschirm nicht einsehen kann!
b1) Schüler/in 1:
Zeig deinen Code, nicht aber die Blumenwiese selbst, deiner Partnerin/deinem Partner. Sie/Er soll nun anhand des Codes beschreiben, wie "deine" Blumenwiese aussieht.
b2) Schüler/in 2:
Lass "deine" Blumenwiese ausgeben und mach einen Screenshot davon. (Alternativ kannst du sie auch mit deinem Smartphone fotografieren.) Wichtig: Der Code darf auf dem Bild nicht zu sehen sein!
Speichere deinen Code an einem sicheren Ort ab, sodass du schnell wieder darauf zugreifen kannst. Baue nun in deinen Code drei Fehler ein. Zeig nun deiner Partnerin/deinem Partner den Screenshot und den fehlerhaften Code. Sie/Er soll nun die Fehler finden und beheben, sodass wieder "deine" Blumenwiese ausgegeben wird.
Du hast gelernt, Verzweigungen für die Grafikkomposition zu nutzen.
Du weisst, dass die if-elif-else
-Verzweigung eine effiziente Methode ist, um verschiedene Bedingungen nacheinander zu überprüfen und damit Werte in verschiedene Kategorien zu klassifizieren. Dabei wird der Codeblock des ersten wahren Zweigs ausgeführt, und die nachfolgenden Bedingungen werden übersprungen.
Ausserdem sorgt die if-elif-else
-Verzweigung für logische Klarheit und erleichtert die Fehlersuche. Sie ist eine wichtige Technik zur Steuerung des Programmflusses in Python-Programmen.
This activity has been created by Lichtsteiner and is licensed under CC BY-SA 4.0.
It is derived from this activity.
Verzweigungen für Grafikkompositionen
PyTamaro is a project created by the Lugano Computing Education Research Lab at the Software Institute of USI
Privacy Policy • Platform Version c08406b (Wed, 20 Nov 2024 12:30:00 GMT)