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:karatutorial:verzweigungen [2026-08-15 12:34] – [Weiter] hofgf_informatik:karatutorial:verzweigungen [2026-09-02 07:25] (aktuell) hof
Zeile 1: Zeile 1:
 ## Selektion mit Verzweigungen ## Selektion mit Verzweigungen
  
-Manchmal möchten wir eine Anweisung (oder eine _Sequenz_ von Anweisungennur dann ausführen, wenn eine Bedingung erfüllt istBeispielsweise möchten wir, dass Kara sich nach rechts drehtwenn sie vor einem Baum stehtDies erreichen wir mit einer Verzweigung. Ähnlich wie bei der `while`-Schleife können wir eine Bedingung definieren; ist sie erfüllt, so wird der Block ausgeführt, sonst nicht:+### 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 kannkönnen Blätter gelegt und aufgenommen werdenDie folgenden Funktionen stehen zur Verfügung:
  
-<kara-editor step="300" id="if"> +  * `kara.onLeaf()` ist genau dann wahr (`True`), falls sich Kara auf einem Kleeblatt befindet, sonst falsch (`False`). 
-if kara.treeFront(): +  * `kara.putLeaf()` legt ein Blatt ab. 
-    kara.turnRight()+    * Schlägt fehlt und beendet das Programm, wenn bereits ein Blatt vorhanden ist. 
 +  * `kara.removeLeaf()` nimmt ein Blatt auf. 
 +    * Schlägt fehlt und beendet das Programm, wenn kein Blatt vorhanden ist. 
 + 
 +#### Aufgabe C1: Blätter sammeln 
 + 
 +Schreibe Code, um alle bestehenden Blätter aufzusammeln. Achtung, auf dem Startfeld hat es kein Blatt! 
 + 
 +<kara-exercise id="collect_leaves" showsolution>
 <kara-world> <kara-world>
    TTTTTTTTT    TTTTTTTTT
-         T +   T>LLLLLLT
-         T +
-         T +
-         T +
-   TT>T    M +
-         T +
-         T+
    TTTTTTTTT    TTTTTTTTT
 </kara-world> </kara-world>
-</kara-editor>+<kara-solution> 
 +while not kara.treeFront(): 
 +    kara.move() 
 +    kara.removeLeaf() 
 +</kara-solution> 
 +<kara-tests> 
 +assert world_leaves() == 0, f"Es hat noch {world_leaves()} Blätter!" 
 +</kara-tests> 
 +</kara-exercise>
  
-Der Fachbegriff für eine Verzweigung ist **Selektion** (Auswahl einer Anweisung). 
  
-### Aufgabe 5 +### Verzweigungen 
-Betrachte folgende Kara-Welt und den dazugehörigen Code! Was wird Kara tun? Ergänze den Codeso dass Kara zum Pilz findet!+Wir können nur Blätter aufnehmenwenn 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).
  
-<kara-editor step="300" id="a5">+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. 
 + 
 +<kara-exercise id="collect_leaves_if"
 +<kara-world> 
 +   TTTTTTTTT 
 +   T>L L L T 
 +   TTTTTTTTT 
 +</kara-world> 
 +while not kara.treeFront(): 
 +    kara.move() 
 +    if kara.onLeaf(): 
 +        kara.removeLeaf() 
 +<kara-tests> 
 +assert world_leaves() == 0, "keine Blätter erwartet" 
 +</kara-tests> 
 +</kara-exercise> 
 + 
 +#### Aufgabe C2: Blätter verteilen 
 + 
 +Schreibe Code, der gerade umgekehrt funktioniert: Überall, wo **kein** Blatt ist, soll eines hingelegt werden - auch im Startfeld. 
 + 
 +<kara-exercise id="put_leaves_ifshowsolution> 
 +<kara-world> 
 +   TTTTTTTTTT 
 +   T>L L L LT 
 +   TTTTTTTTTT 
 +</kara-world> 
 +<kara-tests> 
 +assert world_leaves() == 8, "8 Blätter erwartet" 
 +</kara-tests> 
 +<kara-solution> 
 +while not kara.treeFront(): 
 +    if not kara.onLeaf(): 
 +        kara.putLeaf() 
 +    kara.move() 
 +</kara-solution> 
 +</kara-exercise> 
 + 
 + 
 + 
 +#### Aufgabe C3: Labyrinth-Gärtner 
 + 
 +Schreibe Code mit `while` und `if`, um alle Blätter aufzusammeln. Kara stoppt, wenn Sie einen Pilz erreicht. 
 + 
 +<kara-exercise id="gardener1" step="50" showsolution> 
 +<kara-world> 
 +   TTTTTTTTTTT 
 +   T>L L L L T 
 +   TTTTTTTTTLT 
 +   TLLL  LLT T 
 +   TLTTTTTLTLT 
 +   TLTLLMTLTLT 
 +   TLTLTTTLTLT 
 +   TLT     TLT 
 +   TLTTTTTTTLT 
 +   TLLLLLLLLLT 
 +   TTTTTTTTTTT 
 +</kara-world> 
 +<kara-solution>
 while not kara.mushroomFront(): while not kara.mushroomFront():
 +    if kara.treeFront():
 +        kara.turnRight()
     kara.move()     kara.move()
 +    if kara.onLeaf():
 +        kara.removeLeaf()
 +</kara-solution>
 +<kara-tests>
 +assert world_leaves() == 0, "alle Blätter sollten entfernt sein"
 +</kara-tests>
 +</kara-exercise>
 +
 +### 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):
 +
 +<kara-exercise id="toggle_leaves" showsolution>
 <kara-world> <kara-world>
    TTTTTTTTT    TTTTTTTTT
-   T       T +   T>L L L 
-   T >   T T +   TTTTTTTTT
-         T +
-         T +
-         T +
-         T +
-         +
-   TTTTTMTTT+
 </kara-world> </kara-world>
-</kara-editor>+while not kara.treeFront(): 
 +    if kara.onLeaf(): 
 +        kara.removeLeaf() 
 +    else: 
 +        kara.putLeaf() 
 +    kara.move() 
 +<kara-tests> 
 +assert world_leaves() == 3 
 +</kara-tests> 
 +</kara-exercise>
  
-++++Lösung 5| +#### Aufgabe C4: Blattwanderung 
-<code python>+ 
 +Schreibe Python-Code mit folgenden Eigenschaften: 
 +  * Kara soll folgende Anweisungen befolgen, solange sie auf keinen Pilz stösst. 
 +    * Wenn Kara auf einem Blatt steht, 
 +      * soll sie nach links wenden; 
 +    * andernfalls: 
 +      * soll Kara nach rechts wenden. 
 +    * Dann soll Kara einen Schritt nach vorne machen. 
 + 
 +Bei welchem Pilz landet Kara? 
 + 
 +<kara-exercise id="leaf_walk" showsolution> 
 +<kara-world> 
 +   TTTTTTTTTTT 
 +   TM       MT 
 +   T L LL  L T 
 +   TL  LLLLL T 
 +      L    T 
 +   TL  >L LL T 
 +     LL  L T 
 +    L  L   T 
 +   TM     MT 
 +   TTTTTTTTTTT 
 +</kara-world> 
 +<kara-solution>
 while not kara.mushroomFront(): while not kara.mushroomFront():
-    if kara.treeFront():+    if kara.onLeaf()
 +        kara.turnLeft() 
 +    else:
         kara.turnRight()         kara.turnRight()
     kara.move()     kara.move()
-</code+</kara-solution
-+++++<kara-tests> 
 +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." 
 +</kara-tests> 
 +</kara-exercise>
  
-### Else - Andernfalls +#### Aufgabe C5: Pilzsuche
-Wie wir gesehen haben, können Schleifen und Verzweigungen auch innerhalb eines anderen eingerückten Programmblocks stehen.+
  
-Manchmal möchten wir genau eine von beiden alternativen Code-Sequenzen ausführenje nachdem ob die Bedingung erfüllt ist oder nichtDies geschieht mit `else`:+Lies das folgende Python-Programm für Kara und beschreibe es in natürlicher Sprache. Bestimmeauf welchem Feld Kara landen wird.
  
 +<WRAP group>
 +<WRAP column twothirds>
 <code python> <code python>
-if kara.treeFront(): +while not kara.treeFront(): 
-    kara.turnLeft() +    if kara.onLeaf(): 
-else:+        kara.turnLeft() 
 +    if kara.mushroomFront(): 
 +        kara.turnRight()
     kara.move()     kara.move()
 </code> </code>
 +</WRAP>
 +<WRAP column third>
 +{{.:leaves:pasted:20260828-062628.png?nolink&407|}}
 +</WRAP>
 +</WRAP>
  
-### Aufgabe 6 +<nodisp 1> 
-Analysiere den untenstehenden Code, bevor du ihn ausführst. Beschreibe auf Deutsch, was Kara tun wirdFühre den Code erst dann aus! Findet Kara zum Pilz?+++++Lösung| 
 +Kara landet auf dem Feld **B6**.
  
-<kara-editor step="300" id="a6"> +Eine Beschreibung könnte so aussehen: 
-while not kara.mushroomFront():+  * Solange Kara nicht vor einem Baum steht: 
 +    * Falls Kara auf einem Blatt steht: 
 +      * ... wendet sie nach links. 
 +    * Falls Kara vor einem Pilz steht: 
 +      * ... wendet sie nach rechts. 
 +    * So oder so geht Kara einen Schritt weiter. 
 + 
 +<kara-exercise id="mushroom_walk"
 +<kara-world> 
 +   TTTTTTTTTTT 
 +   T L     T 
 +   T M       T 
 +   T M  ML   T 
 +           T 
 +     LM  L T 
 +    v   
 +    L   
 +       L L T 
 +           T 
 +   TTTTTTTTTTT 
 +</kara-world> 
 +while not kara.treeFront(): 
 +    if kara.onLeaf(): 
 +        kara.turnLeft() 
 +    if kara.mushroomFront(): 
 +        kara.turnRight() 
 +    kara.move() 
 +</kara-exercise> 
 +++++ 
 +</nodisp> 
 + 
 +#### Aufgabe C6: Golfplatz (schwierig) 
 +Der Golf-Rasen ist voller Blätter - schreibe Code, um alle Blätter aufzusammeln! 
 + 
 +++++Hinweise:
 +  * Idee 1: Einmal links, einmal rechts wenden. Dafür benötigen wir für jede Strecke eine while not `kara.treeFront()` Schleife. 
 +  * Idee 2: Spirale laufen. Wenn ein Feld ohne Blatt erreicht wird, müssen wir zurück und wenden. 
 +++++ 
 + 
 +<kara-exercise id="gardener2step="50" showsolution> 
 +<kara-world> 
 +   TTTTTTTTTTT 
 +   TeLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TLLLLLLLLLT 
 +   TTTTTTTTTTT 
 +</kara-world> 
 +<kara-solution> 
 +# Spirale laufen 
 +while kara.onLeaf(): 
 +    kara.removeLeaf() 
 +    # Wenden beim Baum.
     if kara.treeFront():     if kara.treeFront():
 +        kara.turnRight()
 +    kara.move()
 +    if not kara.onLeaf():
 +        # zu weit! Aus Kara's Sicht hinten rechts weitersuchen.
         kara.turnRight()         kara.turnRight()
         kara.move()         kara.move()
-        kara.turnLeft() +        kara.turnRight()
-        kara.move()+
         kara.move()         kara.move()
         kara.turnLeft()         kara.turnLeft()
-        kara.move() +</kara-solution> 
-        kara.turnRight() +<kara-tests
-    else: +assert world_leaves() == 0 
-      kara.move() +</kara-tests
-<kara-world+</kara-exercise> 
-   TTTTTTTTT +
-         T +
-         T +
-         T +
-         T +
-   T> T  T M +
-         T +
-         T +
-   TTTTTTTTT +
-</kara-world+
-</kara-editor>+
 ### Weiter ### Weiter
-Gratuliere, du hast deine ersten Kara-Verzweigungen geschrieben! Weiter gehts mit [[.:labyrinthe]].+Weiter gehts mit [[.:logik]].
  
  
  • gf_informatik/karatutorial/verzweigungen.1786797281.txt.gz
  • Zuletzt geändert: 2026-08-15 12:34
  • von hof