Pixelgrafiken mit 2D-Listen
Informatik · Python · Klassen 9–11 · PRIMM-Methode
🎯 Worum geht's? Klasse 9–11 · 3 Unterrichtsstunden
Nach dieser Seite kannst du …
- vorhersagen, welches Bild verschachtelte Schleifen erzeugen
- Farben als Zahlen (0xRRGGBB) lesen und aus Rot, Grün und Blau berechnen
- Muster mit
%, Bedingungen und Spiegelungen gezielt verändern - eigene Pixelgrafiken programmieren
Vorwissen: Listen, for-Schleifen und if in Python
📝 Aufgaben
Jede Aufgabe hat fünf Schritte: Predict › Run › Investigate › Modify › Make. Wähle eine Aufgabe aus – oder nutze oben die Leiste „Aufgaben: 1, 2, 3 …“.
📐 Das Wichtigste in Kürze
- Ein Bild ist eine Liste von Zeilen:
bild[z][s]ist das Pixel in Zeilez, Spaltes. - Leeres Bild:
bild = [[0] * breite for _ in range(hoehe)]. - Farben als Hex-Zahl
0xRRGGBB:0xFF0000rot,0x00FF00grün,0x0000FFblau,0xFFFFFFweiß,0x000000schwarz. - Aus Anteilen zusammensetzen:
(rot << 16) | (gruen << 8) | blau(je 0–255).
🏅 Zuletzt verdiente Badges
Analysiere die Funktion, ohne das Bild anzusehen.
Aufruf: schachbrett(8)
Welches Bild entsteht?
(0 + 0) % 2, was (0 + 1) % 2? Welche Farbe hat Pixel [0][0]?So sieht das Ergebnis aus.
Welche Farbe hat das Pixel in Zeile 0, Spalte 1?
Was ergibt (z + s) % 2 für z = 3, s = 3?
Warum zwei verschachtelte Schleifen?
Passe die Funktion an, sodass ein rot-blaues Schachbrett entsteht: 0xFF0000 statt weiß, 0x0000FF statt schwarz.
Schreibe dreifarben_muster(groesse): Drei Farben deiner Wahl wechseln sich diagonal ab – nutze (z + s) % 3 und eine Liste palette.
palette ab und wähle den Index mit (z + s) % 3.Rot hängt von der Spalte ab, Grün von der Zeile.
Aufruf: farbverlauf(16, 12)
Welche Farbe hat das Pixel oben links?
Berechne die Anteile des Pixels oben rechts (z = 0, s = 15).
| Anteil | Formel | Wert |
|---|---|---|
rot | (15 * 255) // 15 | |
gruen | (0 * 255) // 11 | |
blau | – |
Was macht (rot << 16) | (gruen << 8) | blau?
Warum steht die Zeile zuerst: bild[z][s]?
Setze blau nicht fest auf 128, sondern berechne blau = 255 - rot.
blau ändert sich.Schreibe graustufen(breite, hoehe): links Weiß, nach rechts gleichmäßig dunkler bis Schwarz. Bei Grau gilt rot = grün = blau = hell mit hell = 255 - (s * 255) // (breite - 1).
hell für jede Spalte und setze denselben Wert für Rot, Grün und Blau ein.Der Farbindex ergibt sich aus Zeile plus Spalte.
Aufruf: diagonal_muster(12)
Welches Bild entsteht?
z + s haben dieselbe Farbe – z. B. [0][2], [1][1], [2][0].Trage den Palettenindex für die oberste Zeile (z = 0) ein.
| [0][0] | [0][1] | [0][2] | [0][3] | [0][4] | [0][5] | |
|---|---|---|---|---|---|---|
idx |
(0 + s) % 6.Welcher Ausdruck statt (z + s) ergibt senkrechte Streifen?
Warum gibt (z + s) % len(palette) nie einen IndexError?
Ändere nur den Index-Ausdruck so, dass waagerechte Streifen entstehen.
Schreibe rahmen_muster(n): Der äußere Rand (1 Pixel) ist rot 0xFF0000, der Rest weiß 0xFFFFFF.
Die Bedingungen werden der Reihe nach geprüft.
Aufruf: rahmen_kreuz(9)
Welches Bild entsteht?
Bestimme die Farbe (blau/rot/grau) der Pixel bei rahmen_kreuz(9).
| Pixel | Rand? | Kreuz? | Farbe |
|---|---|---|---|
| [0][0] | ja | nein | |
| [4][4] | nein | ja | |
| [2][3] | nein | nein | |
| [0][4] | ja | ja |
Warum werden die Bedingungen in Variablen gespeichert?
Was ist mitte bei n = 8?
Ändere das Kreuz zu einem Diagonalkreuz: rot sind die Pixel mit z == s oder z + s == n - 1.
Schreibe zielscheibe(n): Abstand zur Mitte m = n // 2 mit d = round(math.sqrt((z - m) ** 2 + (s - m) ** 2)); bei geradem d rot 0xFF0000, sonst weiß.
d % 2.Nur die linke Hälfte wird berechnet, die rechte gespiegelt.
Aufruf: spiegelung(8)
Welche Aussage trifft auf das Bild zu?
bild[z][s] und bild[z][n - 1 - s] bekommen jeweils dieselbe Farbe.So sieht das Ergebnis aus.
Welche Farbe haben bild[2][1] und bild[2][6]?
Was berechnet n - 1 - s?
Wie viele Spalten je Zeile werden bei n = 8 tatsächlich berechnet?
Spiegle das Bild oben ↔ unten statt links ↔ rechts: Die obere Hälfte wird berechnet, die untere gespiegelt.
Schreibe viertel_spiegelung(n): Berechne die Farben nur im Viertel oben links (z und s bis n // 2) und spiegle sie in alle vier Viertel. Das Muster im Viertel darfst du frei wählen.
Die Farbe hängt vom Abstand zur Bildmitte ab.
Aufruf: zielscheibe(14)
Welches Bild entsteht?
Bei zielscheibe(14) ist m = 14 // 2 = 7.
Welchen Abstand hat Pixel [0][0] von der Mitte (gerundet auf zwei Stellen)?
Wozu dient abstand % 2?
Was ändert sich mit % 3?
Verwende drei Farben: palette = [0xE53935, 0xFFFFFF, 0x1565C0] und den Index abstand % 3.
abstand % 3.Schreibe ellipse(breite, hoehe): Ein Pixel liegt innen, wenn ((z - ry) / ry) ** 2 + ((s - rx) / rx) ** 2 <= 1 mit rx = breite / 2, ry = hoehe / 2. Innen rot 0xE53935, außen grau 0xF5F5F5.
Plane zuerst, was du zeichnen möchtest.
Welche Idee möchtest du umsetzen?
z, welche von s abhängen.Denk an die Aufgaben 1 bis 6 zurück.
Was haben alle Funktionen gemeinsam?
Welchen Vorteil hat eine Liste von Listen gegenüber einzelnen Variablen je Pixel?
Wie viele Pixel hat [[0] * 30 for _ in range(20)]?
Verändere den Farbverlauf: Wähle andere Formeln oder Farben, sodass ein anderes Bild entsteht. Mit „▶ Ausführen“ siehst du dein Ergebnis.
blau oder tausche, welche Farbe von z bzw. s abhängt.Programmiere deine eigene Grafik in mein_bild(breite, hoehe) – zum Beispiel deine Idee aus Predict. Sie muss eine Liste von Zeilen zurückgeben und mindestens zwei Farben verwenden.
z und s in Bereiche und gib jedem Bereich eine Farbe.🏅 Deine Badges
Verdiente Badges leuchten auf.
📊 Statistik
↺ Zurücksetzen
Alle gespeicherten Daten werden gelöscht.
📄 Arbeitsblatt erstellen
Wähle aus, welche Bereiche auf das Arbeitsblatt kommen. Es enthält dann alle … Aufgaben dieser Seite aus diesen Bereichen – mit Kästchen zum Ankreuzen, leeren Tabellen und Platz zum Schreiben, ohne Lösungen und Tipps.