Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
gf_informatik:programmieren_iii_gra [2025-03-31 21:08] – [Popcorn (Optional)] gragf_informatik:programmieren_iii_gra [2025-06-05 07:21] (aktuell) – [Programmieren Teil 3 – Listen (mit der while-Schleife)] gra
Zeile 1: Zeile 1:
 ====== Programmieren Teil 3 – Listen (mit der while-Schleife) ====== ====== Programmieren Teil 3 – Listen (mit der while-Schleife) ======
  
- +  * Dieses Seite ist die Fortsetzung von [[gf_informatik:programmieren_ii_gra|]]. 
-Dieses Seite ist die Fortsetzung von [[gf_informatik:programmieren_ii_gra|]]. +  * Weiter zu [[gf_informatik:programmieren_iv_gra|]].
  
 ++++Lernziele:| ++++Lernziele:|
Zeile 13: Zeile 13:
    * Ich kann Listen anaylsieren (z.B. Mittelwert oder Höchstwert ermitteln) oder verändern (z.B. Duplikate entfernen etc).    * Ich kann Listen anaylsieren (z.B. Mittelwert oder Höchstwert ermitteln) oder verändern (z.B. Duplikate entfernen etc).
    * Ich kann das Modul ''random'' importieren und die Funktion ''randint'' verwenden.    * Ich kann das Modul ''random'' importieren und die Funktion ''randint'' verwenden.
-   * Ich kann bestimmte Elemente in einer Liste suchen.+   * Ich kann mit ''in'' fragen, ob ein bestimmtes Element in einer Liste vorkommt.
    * Ich kann bestimmte Elemente in einer Liste zählen.     * Ich kann bestimmte Elemente in einer Liste zählen. 
  
Zeile 418: Zeile 418:
  
  
-=== Popcorn (Optional) === +=== Aufgabe L21 – Popcorn (optional) === 
-Mit der Turtle-Funktion playTone kannst du einen Ton von bestimmter Frequenz für eine bestimmte Dauer spielen ein Instrument wählen. Beispiel:+{{:gf_informatik:programmieren_iii_gra:pasted:20250331-211019.png?300}} 
 + 
 +Mit der Turtle-Funktion ''playTone'' kannst du einen Ton von bestimmter Frequenz für eine bestimmte Dauer spielen ein Instrument wählen. Beispiel:
 <code python> <code python>
 playTone(440, 300, instrument = "guitar") playTone(440, 300, instrument = "guitar")
 </code> </code>
-Hier wird der Ton A4 (440 Hz) für 300 Millisekunden mit dem Klang einer Gitarre gespielt.+Hier wird der Ton A4 (440 Hz) für 300 Millisekunden mit dem Klang einer Gitarre gespielt. Weitere Infos zur Funktion [[https://www.python-online.ch/index.php?inhalt_links=turtle/navigation.inc.php&inhalt_mitte=turtle/turtledoc.html#|hier]]
  
 Mit Listen können wir Melodien erstellen: Wir können alle Töne in einer Melodie in einer Liste speichern.  Mit Listen können wir Melodien erstellen: Wir können alle Töne in einer Melodie in einer Liste speichern. 
Zeile 457: Zeile 459:
 ] ]
 </code> </code>
-Obiger Code definiert erst die Frequenzen für die Töne A3 bis G5 (und P für Pause). Dann werden die Töne des Lieds [[https://youtu.be/2HCQk1awCFY?si=KsLdnwWbHNHBnO4c|Pop Corn von Gershon Kingsley]] in einer Liste gespeichert. **Beachte:** P steht für Pause. Hier soll für die Dauer eines Tones kein Ton gespielt werden.+Obiger Code definiert erst die Frequenzen für die Töne A3 bis G5 (und P für Pause). Dann werden die Töne des Lieds [[https://youtu.be/Yx0KBLFG8qc?si=npQqnemJkc1lV2Fj|Pop Corn von Gershon Kingsley]] in einer Liste gespeichert. **Beachte:** P steht für Pause. Hier soll für die Dauer eines Tones kein Ton gespielt werden
 + 
 +**Aufgabe:** Schreibe ein Programm, das die Liste durchgeht und Ton für Ton der Melodie spielt. Bei einem Pausenton soll für die Dauer eines Tons nichts gespielt, also gewartet werden (mit der Funktion ''delay()''). 
 + 
 +== Zusatzaufgabe 1 – Bruder Jakob == 
 +Die Popcorn-Melodie ist einfach mit Blick auf die Rhythmus: Alle Töne sind gleich lang. Bei den meisten Liedern ist das nicht so. Zum Beispiel beim Lied //Bruder Jakob//: 
 + 
 +{{:gf_informatik:programmieren_iii_gra:pasted:20250401-070509.png?400}} 
 + 
 +Schreibe ein Programm, das die Melodie von Bruder Jakob korrekt spielt.  
 +  * Erstelle erst die Liste der Töne (ausgehnd von den Noten). [[https://mixbutton.com/music-tools/frequency-and-pitch/music-note-to-frequency-chart|Hier die Zuordnung zu den Frequenzen]].  
 +  * Erstelle dann eine zweite Liste für die Tondauern: Für jeden Ton der ersten Liste speichert diese Liste die entsprechende Dauer (Viertelton, Halbton, ganzer Ton). 
 +  * In der while-Schleife kannst du dann beide Listen gleichzeitig durchgehen.  
 + 
 +=== Aufgabe L22 – Pixel-Art (für Fortgeschrittene) === 
 +{{:gf_informatik:programmieren_iii_gra:pasted:20250424-125351.png?600}} 
 + 
 +Für diese Aufgabe benötigst du [[gf_informatik:programmieren_iv_gra|Funktionen]].  
 + 
 +Gehe von Aufgabe L20 aus und verändere sie wie folgt: 
 +  * Zeichne Quadrate statt kreisförmige Punkte. Erstelle hierzu eine Funktion ''square(color, side)'', der du die Farbe als String und die Seitenlänge als Zahl übergibst. Die Funktion zeichnet dann ein Quadrat mit gewünschter Farbe und Seitenlänge. 
 +  * Die zweidimensionale Liste für ein Bild ist nun mehrfarbig: Die Zahlen 0 bis 3 stehen für Positionen in der Farbliste ''colors'', siehe Code unten. 
 +  * Du kannst die [[https://www.trinket.io/docs/colors|Farbnamen hier]] (ohne Abstände) oder RGB-Hexwerte verwenden. Auf jeden Fall musst du die Werte in Anführungstriche setzen. 
 + 
 +<WRAP group> 
 +<WRAP column half> 
 +Folgende Listen... 
 +<code python> 
 +# 4 Farben: 1 für Hintgergrund, 3 für Bild 
 +colors = ("#2D1A2E", "#ADE3F9", "cornflowerblue", "#3671F4"
 + 
 +# Pixel-Liste: Zahlen sind Positionen in Farben-Liste 
 +pixels = [[0, 0, 0, 1, 1, 0, 0, 0],  
 +          [0, 0, 1, 1, 1, 1, 0, 0],  
 +          [0, 1, 1, 1, 1, 1, 1, 0],  
 +          [0, 1, 0, 1, 1, 0, 1, 0],  
 +          [0, 2, 2, 2, 2, 2, 2, 0],  
 +          [0, 0, 2, 0, 0, 2, 0, 0],  
 +          [0, 3, 0, 3, 3, 0, 3, 0],  
 +          [3, 0, 3, 0, 0, 3, 0, 3]] 
 +</code> 
 +</WRAP> 
 + 
 +<WRAP column half> 
 +...entsprechen diesem Bild: 
 + 
 +{{:gf_informatik:programmieren_iii_gra:pasted:20250424-130408.png?220}} 
 +</WRAP> 
 +</WRAP> 
 + 
 +== Aufgabe == 
 + 
 +  - Wähle ein Bild aus dieser {{ :gf_informatik:8x8pixelart.jpg?linkonly|Kollektion aus dreifarbigen Bildern}}. 
 +  - Passe die Farbliste und die Pixel-Liste so an, dass sie deinem Bild entsprechen. 
 +  - Passe deinen Code an, sodass die Turtle das gewünschte Bild zeichnet. 
 + 
 +== Zusatzaufgabe == 
 +Erweitere deine Pixelliste um eine weitere Dimension: Die Liste enthält mehrere Bilder, die nacheinander angezeigt werden, sodass eine Animation entsteht. Tipp: Starte mit bloss zwei Bildern. Verändere im zweiten Bild nur einzelne Punkte und beobachte den Effekt.
  
-Schreibe Code, der die Liste durchgeht und Ton für Ton der Melodie spielt. Bei einem Pausenton soll für die Dauer eines Tons nichts gespielt, also gewartet werden (mit der Funktion ''delay''). Erstelle eine Variable für die Tondauer, sodass du das Tempo leicht anpassen kannst.  
 ===== Lösungen ===== ===== Lösungen =====
  
Zeile 758: Zeile 816:
  
 </nodisp> </nodisp>
-<nodisp 2+<nodisp 1
-++++Lösungen L16-L20|+++++Lösungen L16-L22|
  
 === Aufgabe L16 === === Aufgabe L16 ===
Zeile 850: Zeile 908:
 === Aufgabe L20 === === Aufgabe L20 ===
 <code python> <code python>
-rom gturtle import * +from gturtle import * 
 morla = Turtle() morla = Turtle()
  
Zeile 882: Zeile 940:
         column = column + 1         column = column + 1
     ypos = ypos - 30     ypos = ypos - 30
 +    row = row + 1
 +</code>
 +
 +=== Aufgabe L21 ===
 +<code python>
 +from gturtle import *
 +
 +# Frequenzen der Noten von A3 bis G5
 +A3  = 220
 +B3  = 247
 +C4  = 262
 +D4  = 294
 +E4  = 330
 +F4  = 349
 +G4  = 392
 +A4  = 440
 +B4  = 494
 +C5  = 523
 +D5  = 587
 +E5  = 659
 +F5  = 698
 +F5s = 740
 +G5  = 784
 +P = 0
 +
 +popcorn = [
 +    A4, G4, A4, E4, C4, E4, A3, P,
 +    A4, G4, A4, E4, C4, E4, A3, P,
 +    A4, B4, C5, B4, C5, A4, B4, A4, B4, G4, A4, G4, A4, F4, A4, P, 
 +    A4, G4, A4, E4, C4, E4, A3, P,
 +    A4, G4, A4, E4, C4, E4, A3, P,
 +    A4, B4, C5, B4, C5, A4, B4, A4, B4, G4, A4, G4, A4, B4, C5, P,
 +    E5, D5, E5, C5, G4, C5, E4, P, 
 +    E5, D5, E5, C5, G4, C5, E4, P, 
 +    E5, F5s, G5, F5s, G5, E5, F5s, E5, F5s, D5, E5, D5, E5, C5, E5, P 
 +]
 +
 +dauer = 200
 +i = 0
 +
 +while i < len(popcorn):
 +    if popcorn[i] == 0:
 +        delay(dauer)
 +    else:
 +        playTone(popcorn[i], dauer, instrument = "guitar")
 +    i = i + 1
 +</code>
 +
 +=== Aufgabe L22 ===
 +<code python>
 +from gturtle import * 
 +morla = Turtle()
 + 
 +morla.right(90)
 +morla.penUp()
 +morla.hideTurtle()
 +
 +# 4 Farben: 1 für Hintgergrund, 3 für Bild
 +colors = ("#2D1A2E", "#ADE3F9", "cornflowerblue", "#3671F4")
 +
 +# Pixel-Liste: Zahlen sind Positionen in Farben-Liste
 +pixels = [[0, 0, 0, 1, 1, 0, 0, 0], 
 +          [0, 0, 1, 1, 1, 1, 0, 0], 
 +          [0, 1, 1, 1, 1, 1, 1, 0], 
 +          [0, 1, 0, 1, 1, 0, 1, 0], 
 +          [0, 2, 2, 2, 2, 2, 2, 0], 
 +          [0, 0, 2, 0, 0, 2, 0, 0], 
 +          [0, 3, 0, 3, 3, 0, 3, 0], 
 +          [3, 0, 3, 0, 0, 3, 0, 3]]
 +
 +# Ein Quadrat mit gewünschter Farbe zeichnen:
 +def square(color, side):
 +    morla.setFillColor(color)
 +    morla.startPath()
 +    count = 0
 +    while count < 4:
 +        morla.forward(side)
 +        morla.right(90)
 +        count += 1
 +    morla.fillPath()
 +
 +# Pixel für Pixel gemäss Liste zeichnen:
 +px_size = 20
 +row = 0
 +xpos = 0
 +ypos = 0
 +while row < 8:
 +    morla.setPos(xpos, ypos)
 +    column = 0
 +    while column < 8:
 +        square(colors[pixels[row][column]], px_size)
 +        morla.forward(px_size)
 +        column = column + 1
 +    ypos = ypos - px_size
     row = row + 1     row = row + 1
 </code> </code>
  • gf_informatik/programmieren_iii_gra.1743455299.txt.gz
  • Zuletzt geändert: 2025-03-31 21:08
  • von gra