Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
| gf2:programmierkonzeptetraining [2025/01/13 13:30] – marroc | gf2:programmierkonzeptetraining [2025/01/16 15:33] (aktuell) – marroc | ||
|---|---|---|---|
| Zeile 5: | Zeile 5: | ||
| //Was sind Variablen und was nützen sie uns?// | //Was sind Variablen und was nützen sie uns?// | ||
| <WRAP center nicebox orange> | <WRAP center nicebox orange> | ||
| - | Eine **Variable** ist ein Behälter, in dem Daten gespeichert werden können. Stelle dir z.B. einen Koffer vor, in dem du etwas aufbewahren kannst. | + | Eine **Variable** ist ein Behälter, in dem Daten gespeichert werden können. Stelle dir z.B. einen Koffer vor, in dem du etwas aufbewahren kannst. |
| - | * das Speichern von Werten, | + | * Variablen Werte speichern, |
| - | * das automatische Anpassen von Werten, | + | * Variablen |
| - | * ,dass Variablen das Programm agiler machen, | + | * Variablen das Programm agiler machen, |
| - | * ,dass Variablen Redundanzen | + | * durch Variablen Redundanzen |
| - | * Das Verbessern der Lesbarkeit, | + | * durch Variablen die Lesbarkeit |
| - | * ,dass Variablen bei der Modularisierung helfen, | + | * Variablen bei der Modularisierung helfen, |
| - | * und sich dadurch | + | * sich durch Variablen |
| </ | </ | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| Zeile 38: | Zeile 38: | ||
| < | < | ||
| <panel title=" | <panel title=" | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | #Variablen | ||
| + | laenge =5 | ||
| + | material = SANDSTONE | ||
| + | agent.set_item(material, | ||
| + | #Das Bauen | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.move(UP, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | </ | ||
| </ | </ | ||
| </ | </ | ||
| Zeile 45: | Zeile 63: | ||
| //Warum braucht es Funktionen?// | //Warum braucht es Funktionen?// | ||
| <WRAP center nicebox orange> | <WRAP center nicebox orange> | ||
| - | **Funktion** oder Prozedur (die beiden Begriffe werden hier als Synonym betrachtet) bezeichnet ein Unterprogramm, | + | **Funktion** oder Prozedur (die beiden Begriffe werden hier als Synonym betrachtet) bezeichnet ein Unterprogramm, |
| - | * das Vermeiden Redundanzen und das Fördern die Wiederverwendbarkeit | + | * das Vermeiden Redundanzen und das Fördern die Wiederverwendbarkeit, |
| * die bessere Lesbarkeit, | * die bessere Lesbarkeit, | ||
| - | * das Programm wird modularer, | + | * , dass das Programm |
| - | * Komplexe | + | * , dass komplexe |
| - | * die Fehlerbehebung und Wartung vereinfacht | + | * , dass die Fehlerbehebung und Wartung vereinfacht |
| - | * eine Teamarbeit | + | * , dass eine Teamarbeit besser möglich |
| - | * die Wartung und Fehlerbehebung verbessert sich. | + | |
| </ | </ | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| **Aufgabe 2**\\ | **Aufgabe 2**\\ | ||
| - | Erstellen Sie aus der Aufgabe von vorhin eine Funktion mit dem Namen ‘treppe’, die eine Treppe baut. Die Höhe ist dabei 2 und die Länge auf 5 festgelegt. | + | Erstellen Sie aus der Aufgabe von vorhin eine Funktion mit dem Namen '' |
| </ | </ | ||
| < | < | ||
| <panel title=" | <panel title=" | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | |||
| + | #Variablen | ||
| + | laenge =5 | ||
| + | material = SANDSTONE | ||
| + | agent.set_item(material, | ||
| + | |||
| + | #Das Bauen | ||
| + | def treppe(): | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.move(UP, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | #Das Aufrufen der Funktion | ||
| + | treppe() | ||
| + | </ | ||
| </ | </ | ||
| </ | </ | ||
| Zeile 75: | Zeile 115: | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| **Aufgabe 3**\\ | **Aufgabe 3**\\ | ||
| - | Erstellen eine Funktion treppe2(laenge, | + | Erstellen eine Funktion |
| </ | </ | ||
| < | < | ||
| - | <panel title=" | + | <panel title=" |
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | #Variablen | ||
| + | laenge =5 | ||
| + | material = SANDSTONE | ||
| + | agent.set_item(material, | ||
| + | |||
| + | #Das Bauen | ||
| + | def treppe2(laenge, | ||
| + | agent.set_item(material, | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.move(UP, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.turn(LEFT) | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | #Das Aufrufen der Funktion | ||
| + | treppe2(4, | ||
| + | </ | ||
| </ | </ | ||
| </ | </ | ||
| Zeile 86: | Zeile 149: | ||
| ==== Warum ist eine while-Schleife nützlich? ==== | ==== Warum ist eine while-Schleife nützlich? ==== | ||
| <WRAP center nicebox orange> | <WRAP center nicebox orange> | ||
| + | **while-Schleifen** werden verwendet, wenn man nicht weiss, wie oft der Schleifeninhalt wiederholt werden soll. Die Anzahl Wiederholungen kann beispielsweise von einer Eingabe abhängen. | ||
| + | |||
| + | While-Schleifen sind können auch als Endlos-Schleife formuliert werden ('' | ||
| + | |||
| + | Einige nennenswerte Vorteile sind: | ||
| + | * Die Flexibilität durch bedingungsgesteuerte Ausführung, | ||
| + | * Die Dynamische Kontrolle | ||
| + | * While-Schleifen sind geeignet für Endlos-Schleifen | ||
| + | * Komplexe Bedingungen können mit while umgesetzt werden. | ||
| + | * While-Schleifen sind nützlich für Iterationen (periodische Wiederholung) ohne definierte Anzahl. | ||
| </ | </ | ||
| <WRAP nicebox green> | <WRAP nicebox green> | ||
| **Aufgabe 4**\\ | **Aufgabe 4**\\ | ||
| + | A) Erstellen eine Funktion '' | ||
| + | B) Ein Quadrat mit Länge 5 entsteht, dabei soll eine Funktion quadrat(laenge) aufgerufen werden, und der Agent baut das Quadrat. Zusätzlich soll auch die Länge der Quadratseite angegeben werden können. | ||
| + | Es muss ein Parameter und auch eine while-Schleife verwendet werden. | ||
| </ | </ | ||
| < | < | ||
| - | <panel title=" | + | <panel title=" |
| + | Aufgabe 4A) | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | #Das Bauen | ||
| + | def treppe3(laenge, | ||
| + | agent.set_item(material, | ||
| + | n=0 | ||
| + | while n< | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | n=n+1 | ||
| + | #Aufruf der Funktion | ||
| + | treppe3(4, | ||
| + | |||
| + | </ | ||
| + | Aufgabe 4B) | ||
| + | < | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | |||
| + | #Funktionen | ||
| + | def quadrat(laenge): | ||
| + | agent.set_item(EMERALD_BLOCK, | ||
| + | agent.set_slot(1) | ||
| + | i=1 | ||
| + | while (i<= laenge): | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | i=i+1 | ||
| + | #Das Aufrufen | ||
| + | quadrat(laenge) | ||
| + | </ | ||
| </ | </ | ||
| </ | </ | ||
| + | |||
| + | ==== Was sind Listen und warum brauchen wir diese? ==== | ||
| + | <WRAP center nicebox orange> | ||
| + | **Listen**\\ | ||
| + | Mit eckigen Klammern kann man in Python eine Liste erstellen. Dabei können die einzelnen Elemente der Liste ganz unterschiedliche Typen haben. Es können sogar selbst wieder Listen sein. Auf die einzelnen Elemente der Liste kann man zugreifen, indem man den Namen der Liste mit eckigen Klammern und dem Index angibt (der Index bezeichnet die Position des Elementes in der Liste - er beginnt bei 0. | ||
| + | </ | ||
| + | |||
| + | <WRAP nicebox green> | ||
| + | **Aufgabe 5**\\ | ||
| + | A) Verändern Sie die Funktion treppe3 so, dass es für das Material für jede Stufe eine anderes Material verwendet. Dabei soll es zwischen 3 verschiedenen Materialien abwechseln. \\ | ||
| + | B) Verändern Sie die Funktion quadrat(laenge) so, dass sich ein gestreiftes Muster aus zwei verschiedenen Materialien bildet. Dabei müssen Listen verwendet werden. | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | <panel title=" | ||
| + | Aufgabe 5A) | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | |||
| + | #Das Bauen | ||
| + | def treppe4(laenge, | ||
| + | n=0 | ||
| + | material=[RED_SANDSTONE, | ||
| + | while n< | ||
| + | agent.set_item( material[n] ,64,1) | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | n=n+1 | ||
| + | #Der Aufruf | ||
| + | treppe4(5, | ||
| + | </ | ||
| + | Aufgabe 5B) | ||
| + | <code python> | ||
| + | #Variablen | ||
| + | material=[GOLD_BLOCK, | ||
| + | agent.set_item(material[0], | ||
| + | agent.set_item(material[1], | ||
| + | #Funktionen | ||
| + | def quadrat(laenge): | ||
| + | i=1 | ||
| + | while (i< | ||
| + | agent.set_slot(i%2+1) # hier wird durch Modulo 2 wird der Slot 1 oder 2 gewählt. | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | i=i+1 | ||
| + | #Das Aufrufen | ||
| + | quadrat(4) | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | ==== Schleife – for i in range(Start, | ||
| + | <WRAP center nicebox orange> | ||
| + | Sehr häufig möchte man eine regelmässige **Liste** von Zahlen erstellen: z.B. alle Zahlen von 1 bis 10 oder die Zahlen von 1 bis 100 in 2er-Schritten etc. Sehr häufig möchte man eine regelmässige Liste von Zahlen erstellen. \\ | ||
| + | Die **Schleife for i in range(Start, | ||
| + | </ | ||
| + | |||
| + | <WRAP nicebox green> | ||
| + | **Aufgabe 6**\\ | ||
| + | A) Erstellen eine Funktion treppe3(laenge, | ||
| + | B) Verändern Sie die Funktion quadrat(laenge) so, dass sich ein gestreiftes | ||
| + | C) Verändern Sie die Funktion quadrat(laenge) so, dass sich ein schachbrettartiges | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | <panel title=" | ||
| + | Aufgabe 6A) | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | |||
| + | #Das Bauen | ||
| + | def treppe5(laenge, | ||
| + | material=[RED_SANDSTONE, | ||
| + | for i in range (0, hoehe,2): | ||
| + | agent.set_item( material[i] ,64,1) | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(BACK, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(UP, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | #Der Aufruf | ||
| + | treppe5(4, | ||
| + | </ | ||
| + | Aufgabe 6B | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | def quadrat(laenge): | ||
| + | for j in range (laenge): | ||
| + | |||
| + | | ||
| + | agent.set_item(WHITE_CONCRETE, | ||
| + | agent.move(FORWARD, | ||
| + | else: | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_item(BLACK_CONCRETE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | #Das Aufrufen | ||
| + | quadrat(5) | ||
| + | |||
| + | |||
| + | </ | ||
| + | Aufgabe 6C | ||
| + | <code python> | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_assist(DESTROY_OBSTACLES, | ||
| + | agent.set_item(RED_CONCRETE, | ||
| + | |||
| + | #Funktionen | ||
| + | def quadrat(laenge): | ||
| + | for j in range (laenge): | ||
| + | for i in range (laenge): | ||
| + | if ((i+j)%z=0): | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_item(WHITE_CONCRETE, | ||
| + | agent.move(FORWARD, | ||
| + | else: | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.set_item(BLACK_CONCRETE, | ||
| + | agent.move(FORWARD, | ||
| + | agent.set_assist(PLACE_ON_MOVE, | ||
| + | agent.move(LEFT, | ||
| + | agent.move(BACK, | ||
| + | #Das Aufrufen | ||
| + | quadrat(5) | ||
| + | </ | ||
| + | </ | ||
| + | </ | ||