lehrkraefte:blc:informatik:glf25:labyrinthe:lib

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:glf25:labyrinthe:lib [2026/02/06 08:42] – removed - external edit (Unknown date) 127.0.0.1lehrkraefte:blc:informatik:glf25:labyrinthe:lib [2026/02/06 10:28] (current) – [Text] Ivo Blöchliger
Line 1: Line 1:
 +====== Klassen Laby und Zelle ======
 +
 +===== Klassen =====
 +Klassen sind Teil eines verbreiteten und sehr nützlichen Programmierkonzepts.
 +
 +Für unsere Zwecke sind Klassen eine Zusammenfassung von Daten (Variablen, genannt Attribute) und Funktionen (gennant Methoden), die mit diesen Attributen interagieren.
 +
 +Diese Einheit erlaubt es sicherzustellen, dass die Daten immer konsistent sind. 
 +
 +Z.B. im Falle unseres Labyrinths stellen die Klassen sicher, dass wenn die Mauer von einer Zelle zur anderen geöffnet wird, dass das auch automatisch in umgekehrter Richtung geschieht.
 +
 +===== Einrichten =====
 +Legen Sie einen neuen Ordner an und speichern Sie die beiden folgenden Dateien im neuen Ordner (**Rechtslick -> Ziel speichern unter** oder so ähnlich):
 +
 +{{lehrkraefte:blc:informatik:glf25:labyrinthe:laby.py}} {{lehrkraefte:blc:informatik:glf25:labyrinthe:zelle.py}}
 +
 +===== Hello Laby =====
 +Öffnen Sie den neuen Ordner, der die beiden Dateien ''laby.py'' und ''zelle.py'' enthält und legen Sie dort eine neue Datei ''hello.py'' an.
 +
 +<code python hello.py>
 +from laby import Laby
 +from zelle import Zelle
 +
 +l = Laby(5,3)
 +print(l)
 +</code>
 +
 +==== Zellen markieren ====
 +<code python>
 +l[2,1].mark = 'Z'
 +print(l)
 +print(f"Zelle (2,1) ist mit {l[2,1].mark} markiert")
 +</code>
 +
 +==== Mauern öffnen/schliessen ====
 +Der erste Parameter gibt die Richtung an, in welche die Mauer geöffnet werden soll (0 rechts, 1 unten, 2 links, 3 oben).
 +<code python>
 +l[1,1].oeffneMauer(0)
 +l[2,1].oeffneMauer(1)
 +</code>
 +
 +Ist der zweite, optionale Parameter ''False'', wird die Mauer geschlossen:
 +<code python>
 +l[2,1].oeffneMauer(1, False)
 +</code>
 +
 +===== Aufgaben =====
 +Die Aufgaben (ohne Zusatzaufgaben) sollten von allen gelöst werden. 
 +
 +Die Zusatzaufgaben sind dazu da, damit sich jene mit mehr Übung nicht langweilen ;-)
 +
 +==== Kreuz ====
 +Programmieren Sie in Labyrinth das wie folgt aussieht:
 +<code txt>
 ++---+---+---+---+---+
 +|           |
 ++---+---+   +---+---+
 +|           |
 ++---+---+   +---+---+
 +|                   |
 ++---+---+   +---+---+
 +|           |
 ++---+---+   +---+---+
 +|           |
 ++---+---+---+---+---+
 +</code>
 +
 +**Zusatzaufgabe**: Schreiben Sie ein Programm so, dass es für alle Labyrinthgrössen funktioniert. Hinweise:
 +<code python>
 +breite = l.breite  # Anzahl Zellen horizontal
 +hoehe = l.hoehe    # Anzahl Zellen vertikal
 +
 +print(7//2)  # Ganzzahldivision, wird immer abgerundet, ergibt also 3 (und nicht 3.5)
 +</code>
 +==== Heizkörper ====
 +Produzieren Sie folgendes Labyrinth:
 +<code txt>
 ++---+---+---+---+---+---+---+---+
 +|                               |
 ++---+---+---+---+---+---+---+   +
 +|                               |
 ++   +---+---+---+---+---+---+---+
 +|                               |
 ++---+---+---+---+---+---+---+   +
 +|                               |
 ++   +---+---+---+---+---+---+---+
 +|                               |
 ++---+---+---+---+---+---+---+---+
 +</code>
 +
 +**Hinweis**: 
 +  * Überprüfen ob eine Zahl ''y'' gerade ist: ''if y%2 == 0:''
 +
 +**Zusatzaufgabe**: Programm funktioniert für beliebige Labyrinthgrössen.
 +
 +==== Text ====
 +Programmieren Sie folgende Ausgabe:
 +<code text>
 ++---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 +|       | P | r | o | g | r | a | m | m | i | e | r | e | n |         |
 ++---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 +|               | m | a | c | h | t |                 |
 ++---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 +|               | S | p | a | s | s |                 |
 ++---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
 +</code>
 +**Hinweis**:
 +mit ''for buchstabe in "blabla":'' kann etwas für jeden Buchstaben wiederholt werden.
 +
 +**Zusatzaufgabe**: Das Programm funktioniert mit beliebigen Texten als einzige Vorgabe
 +
 +<code python>
 +# Vorgegebener Text
 +text = "Das geht auch voll automatisiert"
 +
 +# Der Rest ist automatisch
 +woerter = text.split(" "    # Text nach Leerschlägen aufteilen und als Liste speichern.
 +anzahlWoerter = len(woerter)  # Anzahl Wörter
 +
 +lmax = max([len(w) for w in woerter])   # Anzahl Buchstaben im längsten Wort
 +
 +# ...
 +
 +for index, wort in enumerate(woerter):  # Wiederhole für jedes Wort, inkl. index
 +   pass  # Tu erst mal nix
 +</code>