Inhaltsverzeichnis

Selektion mit Verzweigungen

Blätter legen und sammeln

Neben Pilzen gibt es in der Kara-Welt auch Kleeblätter (en. leaf). Während ein einzelner Pilz von Kara herumgeschoben werden kann, können Blätter gelegt und aufgenommen werden. Die folgenden Funktionen stehen zur Verfügung:

Aufgabe C1: Blätter sammeln

Schreibe Code, um alle bestehenden Blätter aufzusammeln. Achtung, auf dem Startfeld hat es kein Blatt!

TTTTTTTTT T>LLLLLLT TTTTTTTTT while not kara.treeFront(): kara.move() kara.removeLeaf() assert world_leaves() == 0, f"Es hat noch {world_leaves()} Blätter!"

Verzweigungen

Wir können nur Blätter aufnehmen, wenn eines vorhanden ist. Um eine Anweisung nur dann auszuführen, wenn eine Bedingung wahr ist, verwenden wir eine Verzweigung. Das Schlüsselwort in Python lautet if (en. falls).

Der Fachbegriff für eine Verzweigung ist Selektion (Auswahl eines Ausführungspfades).

Beispiel: Der folgende Code sammelt nur dann ein Blatt, wenn kara.onLeaf() wahr ist. Beachte: Der bedingt ausgeführte Code-Block muss eingerückt sein.

TTTTTTTTT T>L L L T TTTTTTTTT while not kara.treeFront(): kara.move() if kara.onLeaf(): kara.removeLeaf() assert world_leaves() == 0, "keine Blätter erwartet"

Aufgabe C2: Blätter verteilen

Schreibe Code, der gerade umgekehrt funktioniert: Überall, wo kein Blatt ist, soll eines hingelegt werden - auch im Startfeld.

TTTTTTTTTT T>L L L LT TTTTTTTTTT assert world_leaves() == 8, "8 Blätter erwartet" while not kara.treeFront(): if not kara.onLeaf(): kara.putLeaf() kara.move()

Aufgabe C3: Labyrinth-Gärtner

Schreibe Code mit while und if, um alle Blätter aufzusammeln. Kara stoppt, wenn Sie einen Pilz erreicht.

TTTTTTTTTTT T>L L L L T TTTTTTTTTLT TLLL LLT T TLTTTTTLTLT TLTLLMTLTLT TLTLTTTLTLT TLT TLT TLTTTTTTTLT TLLLLLLLLLT TTTTTTTTTTT while not kara.mushroomFront(): if kara.treeFront(): kara.turnRight() kara.move() if kara.onLeaf(): kara.removeLeaf() assert world_leaves() == 0, "alle Blätter sollten entfernt sein"

Verzweigung mit Alternative

Wenn Kara entweder je nach Bedingung die eine oder andere Anweisung ausführen soll, so können wir if zusammen mit else benützen.

Der folgende Code sammelt die bestehenden Blätter und legt ein neues Blatt hin, falls es keines hat (ausser im letzten Feld):

TTTTTTTTT T>L L L T TTTTTTTTT while not kara.treeFront(): if kara.onLeaf(): kara.removeLeaf() else: kara.putLeaf() kara.move() assert world_leaves() == 3

Aufgabe C4: Blattwanderung

Schreibe Python-Code mit folgenden Eigenschaften:

Bei welchem Pilz landet Kara?

TTTTTTTTTTT TM MT T L LL L T TL LLLLL T T L T TL >L LL T T LL L T T L L T TM L MT TTTTTTTTTTT while not kara.mushroomFront(): if kara.onLeaf(): kara.turnLeft() else: kara.turnRight() kara.move() assert kara.x == 8, "Kara sollte links neben dem Pilz in der rechten, oberen Ecke sein." assert kara.y == 1, "Kara sollte links neben dem Pilz in der rechten, oberen Ecke sein."

Aufgabe C5: Pilzsuche

Lies das folgende Python-Programm für Kara und beschreibe es in natürlicher Sprache. Bestimme, auf welchem Feld Kara landen wird.

while not kara.treeFront():
    if kara.onLeaf():
        kara.turnLeft()
    if kara.mushroomFront():
        kara.turnRight()
    kara.move()

Lösung

Aufgabe C6: Golfplatz (schwierig)

Der Golf-Rasen ist voller Blätter - schreibe Code, um alle Blätter aufzusammeln!

Hinweise:

TTTTTTTTTTT TeLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TLLLLLLLLLT TTTTTTTTTTT # Spirale laufen while kara.onLeaf(): kara.removeLeaf() # Wenden beim Baum. if kara.treeFront(): kara.turnRight() kara.move() if not kara.onLeaf(): # zu weit! Aus Kara's Sicht hinten rechts weitersuchen. kara.turnRight() kara.move() kara.turnRight() kara.move() kara.turnLeft() assert world_leaves() == 0

Weiter

Weiter gehts mit Booleans & Logik.