Training

Was sind Variablen und was nützen sie uns?

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. Einige Vorteile von Variablen sind, dass:

  • Variablen Werte speichern,
  • Variablen das automatische Anpassen von Werten ermöglichen,
  • Variablen das Programm agiler machen,
  • durch Variablen Redundanzen vermieden werden können,
  • durch Variablen die Lesbarkeit verbessert werden kann und die Dynamik bzw, Anpassbarkeit erhöht werden,
  • Variablen bei der Modularisierung helfen,
  • sich durch Variablen die Logik von Daten trennen lässt.

Aufgabe 1
Verändern Sie das kleine Programm so, dass A) Eine Treppe beliebiger Länge gebaut werden kann. B) Eine Treppe mit verschiedenen Baumaterialien gebaut werden kann. C)* Eine Treppe verschiedener Höhe gebaut wird.

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
agent.move(FORWARD,3)
agent.turn(LEFT)
agent.move(UP,1)
agent.set_assist(PLACE_ON_MOVE, False)
agent.move(FORWARD,1)
agent.turn(LEFT)
agent.set_assist(PLACE_ON_MOVE, True)
agent.move(FORWARD,4)

Mögliche Lösungen Aufgabe 1

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
#Variablen
laenge =5
material = SANDSTONE
agent.set_item(material,64,1) 
#Das Bauen
agent.move(FORWARD,3)
agent.turn(LEFT)
agent.move(UP,1)
agent.set_assist(PLACE_ON_MOVE, False)
agent.move(FORWARD,1)
agent.turn(LEFT)
agent.set_assist(PLACE_ON_MOVE, True)
agent.move(FORWARD,4)

Warum braucht es Funktionen?

Funktion oder Prozedur (die beiden Begriffe werden hier als Synonym betrachtet) bezeichnet ein Unterprogramm, das durch seinen Namen aufgerufen werden kann. Einige Vorteile von Funktionen sind:

  • das Vermeiden Redundanzen und das Fördern die Wiederverwendbarkeit,
  • die bessere Lesbarkeit,
  • , dass das Programm modularer wird,
  • , dass komplexe Logikabfolgen gekapselt werden,
  • , dass die Fehlerbehebung und Wartung vereinfacht wird,
  • , dass eine Teamarbeit besser möglich wird,

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.

Mögliche Lösung Aufgabe 2

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#Variablen
laenge =5
material = SANDSTONE
agent.set_item(material,64,1) 
 
#Das Bauen
def treppe():
    agent.move(FORWARD,5)
    agent.turn(LEFT)
    agent.move(UP,1)
    agent.set_assist(PLACE_ON_MOVE, False)
    agent.move(FORWARD,1)
    agent.turn(LEFT)
    agent.set_assist(PLACE_ON_MOVE, True)
    agent.move(FORWARD,6)
#Das Aufrufen der Funktion
treppe()

Wenn man mit ‘def’ eine eigene Funktion definiert, kann man diese flexibler machen, indem man Parameter verwendet. Dies sind Variablen, die beim Aufruf der Funktion übergeben werden und dann innerhalb der Funktion wie lokale Variablen funktionieren. Um einige Vorteile von Parametern innerhalb von Funktionen zu nennen:

  • Es ergibt eine dynamische Eingabe,
  • Die Funktion kann wiederverwendet werden,
  • Eine bessere Modularität und Lesbarkeit sind gewährleistet,
  • Achtung, um eine Funktion zu „starten“, muss diese aufgerufen werden!

Aufgabe 3
Erstellen eine Funktion treppe2(laenge, material), die eine Treppe baut, dabei soll die Länge und das Material festgelegt werden können.

Mögliche Lösung Aufgabe 3

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#Variablen
laenge =5
material = SANDSTONE
agent.set_item(material,64,1) 
 
#Das Bauen
def treppe2(laenge,material):
    agent.set_item(material,64,1)
    agent.move(FORWARD, laenge)
    agent.turn(LEFT)
    agent.move(UP,1)
    agent.set_assist(PLACE_ON_MOVE, False)
    agent.move(FORWARD,1)
    agent.turn(LEFT)
    agent.set_assist(PLACE_ON_MOVE, True)
    agent.move(FORWARD, laenge+1)
#Das Aufrufen der Funktion
treppe2(4,RED_SANDSTONE)

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. Falls die Anzahl Wiederholungen festgelegt ist, kann die while-Schleife mit einer Zählervariablen kombiniert auch verwendet werden.

While-Schleifen sind können auch als Endlos-Schleife formuliert werden (while true: …)

Einige nennenswerte Vorteile sind:

  • Die Flexibilität durch bedingungsgesteuerte Ausführung,
  • Die Dynamische Kontrolle
  • While-Schleifen sind geeignet für Endlos-Schleifen (while True)
  • Komplexe Bedingungen können mit while umgesetzt werden.
  • While-Schleifen sind nützlich für Iterationen (periodische Wiederholung) ohne definierte Anzahl.

Aufgabe 4
A) Erstellen eine Funktion treppe3(laenge, material, hoehe), die eine Treppe baut, dabei soll die Länge, die Höhe (wie viele Stufen) und das Material festgelegt werden können. Dabei darf es für die Treppenhöhe nur eine gerade Anzahl Stufen geben. Dabei soll eine while-Schleife verwendet werden. 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.

Mögliche Lösung Aufgabe 4

Aufgabe 4A)

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#Das Bauen
def treppe3(laenge,material, hoehe):
    agent.set_item(material,64,1)
    n=0
    while n<hoehe/2:
        agent.move(FORWARD, laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(BACK,1)
        agent.set_assist(PLACE_ON_MOVE, True)
        agent.move(BACK, laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(FORWARD,1)
        agent.set_assist(PLACE_ON_MOVE, True)
        n=n+1
#Aufruf der Funktion
treppe3(4,GREEN_CONCRETE, 5)]

Aufgabe 4B)

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen

#Funktionen
def quadrat(laenge):
    agent.set_item(EMERALD_BLOCK, 64,1)
    agent.set_slot(1)
    i=1
    while (i<= laenge):
        agent.set_assist(PLACE_ON_MOVE, True)
        agent.move(FORWARD, laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(LEFT,1)
        agent.move(BACK, laenge)
        i=i+1
#Das Aufrufen
quadrat(laenge)

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.

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.

Mögliche Lösung Aufgabe 5

Aufgabe 5A)

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#Das Bauen
def treppe4(laenge, hoehe):
    n=0
    material=[RED_SANDSTONE, GREEN_CONCRETE, YELLOW_CONCRETE]
    while n<hoehe/2:
        agent.set_item( material[n] ,64,1)
        agent.move(FORWARD, laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(BACK,1)
        agent.set_assist(PLACE_ON_MOVE, True)
        agent.move(BACK,laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(FORWARD,1)
        agent.set_assist(PLACE_ON_MOVE, True)
        n=n+1
#Der Aufruf 
treppe4(5,7)

Aufgabe 5B)

#Variablen
material=[GOLD_BLOCK,EMERALD_BLOCK]
agent.set_item(material[0], 64,1)
agent.set_item(material[1], 64,2)
#Funktionen
def quadrat(laenge):
    i=1
    while (i<=laenge):
        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, True)
        agent.move(FORWARD, laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(LEFT,1)
        agent.move(BACK, laenge)
        i=i+1
#Das Aufrufen
quadrat(4)

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,Stop,Step) wird verwendet, um eine bestimmte Anzahl von Wiederholungen durchzuführen. Sie wiederholt (iteriert) über eine Liste von Zahlen, die durch die Funktion range() erzeugt wird.
Erinnerung zum Syntax: for i in range(start, stop, step).
Hierbei erzeugt range() eine Liste von Zahlen. Die Schleife for zähler in range () führt den Programmteil der Schleife für jede Zahl in der Liste aus. Der Variablen zähler wird nacheinander jede Zahl aus der Liste zugewiesen.

Aufgabe 6
A) Erstellen eine Funktion treppe3(laenge, material, hoehe), die eine Treppe baut, dabei soll die Länge, die Höhe (wie viele Stufen) und das Material festgelegt werden können. Dabei darf es für die Treppenhöhe nur eine gerade Anzahl Stufen geben. Dabei soll eine ‘for i in range’-Schleife verwendet werden.
B) Verändern Sie die Funktion quadrat(laenge) so, dass sich ein gestreiftes Muster aus zwei verschiedenen Materialien bildet. Dabei müssen Listen und eine for-Schleife verwendet werden.
C) Verändern Sie die Funktion quadrat(laenge) so, dass sich ein schachbrettartiges Muster aus zwei verschiedenen Materialien bildet. Dabei müssen Listen und eine for-Schleife verwendet werden.

Mögliche Lösung Aufgabe 6

Aufgabe 6A)

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#Das Bauen
def treppe5(laenge, hoehe):
    material=[RED_SANDSTONE, GREEN_CONCRETE, YELLOW_CONCRETE]
    for i in range (0, hoehe,2):
        agent.set_item( material[i] ,64,1)
        agent.move(FORWARD,laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(BACK,1)
        agent.set_assist(PLACE_ON_MOVE, True)
        agent.move(BACK,laenge)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(UP,1)
        agent.move(LEFT,1)
        agent.move(FORWARD,1)
        agent.set_assist(PLACE_ON_MOVE, True)
#Der Aufruf 
treppe5(4,5)

Aufgabe 6B

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
def quadrat(laenge):
    for j in range (laenge):
 
     agent.set_assist(PLACE_ON_MOVE, True)
                agent.set_item(WHITE_CONCRETE, 60, 1)
                agent.move(FORWARD,1)
            else:
                agent.set_assist(PLACE_ON_MOVE, True)
                agent.set_item(BLACK_CONCRETE, 60, 1)
                agent.move(FORWARD,1)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(LEFT,1)
        agent.move(BACK,laenge)
#Das Aufrufen
quadrat(5)

Aufgabe 6C

agent.set_assist(PLACE_ON_MOVE, True) # Agent baut, wenn er sich bewegt
agent.set_assist(DESTROY_OBSTACLES,True) # Agent zerstört Hindernisse beim Bauen
agent.set_item(RED_CONCRETE,64,1) # 64 Blöcke Sandstein ins erste Fach des Inventars legen
 
#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, True)
                agent.set_item(WHITE_CONCRETE, 60, 1)
                agent.move(FORWARD,1)
            else:
                agent.set_assist(PLACE_ON_MOVE, True)
                agent.set_item(BLACK_CONCRETE, 60, 1)
                agent.move(FORWARD,1)
        agent.set_assist(PLACE_ON_MOVE, False)
        agent.move(LEFT,1)
        agent.move(BACK,laenge)
#Das Aufrufen
quadrat(5)
  • gf2/programmierkonzeptetraining.txt
  • Zuletzt geändert: 2025/01/16 15:33
  • von marroc