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:
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)
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:
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.
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:
Aufgabe 3
Erstellen eine Funktion treppe2(laenge, material), die eine Treppe baut, dabei soll die Länge und das Material festgelegt werden können.
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:
while True)
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.
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.
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.
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)