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:leaves [2026-08-27 12:59] – [Aufgabe Gardener 2 (schwierig)] hofgf_informatik:karatutorial:leaves [2026-08-28 06:43] (aktuell) hof
Zeile 9: Zeile 9:
       * Mehrere Iterationen       * Mehrere Iterationen
       * Verschachtelte Iteration       * Verschachtelte Iteration
 +    * Selektion
 +      * mit Blatt (`if kara.onLeaf()`)
 +      * if-else (Blätter sammeln / legen)
 +  * L3:
     * Algorithmik     * Algorithmik
       * Von der Idee zum Programm:       * Von der Idee zum Programm:
Zeile 17: Zeile 21:
           * Sequenz           * Sequenz
           * Iteration (was ist die Bedingung für `while`?)           * Iteration (was ist die Bedingung für `while`?)
 +  * L4:
 +    * Bool'sche Logik: `not`, `and`, `or`
 +  * L5:
 +    * Variablen
 +    * Schleifen mit Zähler
 ++++ ++++
 </nodisp> </nodisp>
Zeile 23: Zeile 32:
 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: 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:
  
-  * `kara.onLeaf()` wahr (`True`), falls sich Kara auf einem Kleeblatt befindet.+  * `kara.onLeaf()` ist genau dann wahr (`True`), falls sich Kara auf einem Kleeblatt befindet, sonst falsch (`False`).
   * `kara.putLeaf()` legt ein Blatt ab.   * `kara.putLeaf()` legt ein Blatt ab.
 +    * Schlägt fehlt und beendet das Programm, wenn bereits ein Blatt vorhanden ist.
   * `kara.removeLeaf()` nimmt ein Blatt auf.   * `kara.removeLeaf()` nimmt ein Blatt auf.
 +    * Schlägt fehlt und beendet das Programm, wenn kein Blatt vorhanden ist.
  
  
Zeile 47: Zeile 58:
 </kara-tests> </kara-tests>
 </kara-exercise> </kara-exercise>
- 
 ### Verzweigungen ### 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`. 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`.
Zeile 69: Zeile 79:
  
 Der Fachbegriff für eine Verzweigung ist **Selektion** (Auswahl einer Anweisung). Der Fachbegriff für eine Verzweigung ist **Selektion** (Auswahl einer Anweisung).
 +
 +### Aufgabe: 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_if" showsolution>
 +<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 Labyrinth-Gärtner ### Aufgabe Labyrinth-Gärtner
  
Zeile 76: Zeile 110:
 <kara-world> <kara-world>
    TTTTTTTTTTT    TTTTTTTTTTT
-   T>LLLLLLLLT+   T>L L L L T
    TTTTTTTTTLT    TTTTTTTTTLT
-   TLLLLLLLTLT+   TLLL  LLT T
    TLTTTTTLTLT    TLTTTTTLTLT
    TLTLLMTLTLT    TLTLLMTLTLT
    TLTLTTTLTLT    TLTLTTTLTLT
-   TLTLLLLLTLT+   TLT     TLT
    TLTTTTTTTLT    TLTTTTTTTLT
    TLLLLLLLLLT    TLLLLLLLLLT
Zeile 92: Zeile 126:
         kara.turnRight()         kara.turnRight()
     kara.move()     kara.move()
-    kara.removeLeaf()+    if kara.onLeaf(): 
 +        kara.removeLeaf()
 </kara-solution> </kara-solution>
 <kara-tests> <kara-tests>
 assert world_leaves() == 0, "alle Blätter sollten entfernt sein" assert world_leaves() == 0, "alle Blätter sollten entfernt sein"
 </kara-tests> </kara-tests>
-</kara-exercise +</kara-exercise> 
->+
 ### Verzweigung mit Alternative ### 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. Wenn Kara entweder je nach Bedingung die eine oder andere Anweisung ausführen soll, so können wir `if` zusammen mit `else` benützen.
Zeile 117: Zeile 152:
     kara.move()     kara.move()
 <kara-tests> <kara-tests>
-assert world_leaves() == 3, "keine Blätter erwartet"+assert world_leaves() == 3
 </kara-tests> </kara-tests>
 </kara-exercise> </kara-exercise>
 +
 ### Aufgabe: Blattwanderung ### Aufgabe: Blattwanderung
  
 Schreibe Python-Code mit folgenden Eigenschaften: Schreibe Python-Code mit folgenden Eigenschaften:
-  * Kara soll sich folgende Anweisungen befolgen, solange sie auf keinen Pilz stösst.+  * Kara soll folgende Anweisungen befolgen, solange sie auf keinen Pilz stösst.
     * Wenn Kara auf einem Blatt steht,     * Wenn Kara auf einem Blatt steht,
       * soll sie nach links wenden;       * soll sie nach links wenden;
Zeile 154: Zeile 190:
 </kara-solution> </kara-solution>
 <kara-tests> <kara-tests>
-assert kara.x == 8, "Kara sollte rechts oben neben dem Pilz sein" +assert kara.x == 8, "Kara sollte links neben dem Pilz in der rechten, oberen Ecke sein.
-assert kara.y == 1, "Kara sollte rechts oben neben dem Pilz sein"+assert kara.y == 1, "Kara sollte links neben dem Pilz in der rechten, oberen Ecke sein."
 </kara-tests> </kara-tests>
 </kara-exercise> </kara-exercise>
 +### Aufgabe: Pilzsuche
 +
 +Lies das folgende Python-Programm für Kara und beschreibe es in natürlicher Sprache. Bestimme, auf welchem Feld Kara landen wird.
 +
 +<WRAP group>
 +<WRAP column twothirds>
 +<code python>
 +while not kara.treeFront():
 +    if kara.onLeaf():
 +        kara.turnLeft()
 +    if kara.mushroomFront():
 +        kara.turnRight()
 +    kara.move()
 +</code>
 +</WRAP>
 +<WRAP column third>
 +{{.:leaves:pasted:20260828-062628.png?nolink&407|}}
 +</WRAP>
 +</WRAP>
 +
 +<nodisp 2>
 +++++Lösung|
 +Kara landet auf dem Feld **B6**:
 +
 +<kara-exercise id="mushroom_walk">
 +<kara-world>
 +   TTTTTTTTTTT
 +   T L     T
 +   T M       T
 +   T M  ML   T
 +           T
 +     LM  L T
 +    v    T
 +    L    T
 +       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 Golfplatz (schwierig) ### Aufgabe Golfplatz (schwierig)
Zeile 186: Zeile 269:
 while kara.onLeaf(): while kara.onLeaf():
     kara.removeLeaf()     kara.removeLeaf()
-    # Wenden, bis Bahn frei +    # Wenden beim Baum. 
-    while kara.treeFront():+    if kara.treeFront():
         kara.turnRight()         kara.turnRight()
     kara.move()     kara.move()
  • gf_informatik/karatutorial/leaves.1787835578.txt.gz
  • Zuletzt geändert: 2026-08-27 12:59
  • von hof