Table of Contents

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

laby.py zelle.py

Hello Laby

hello.py
from laby import Laby
from zelle import Zelle
 
lab = Laby(5,3)
print(lab)

Die Zeilen mit import und die Initialisierung des Labyrinths lab = Laby(5,3) sind in den folgenen Codes der Übersichtlichkeit halber weggelassen.

Zellen markieren

lab[2,1].mark = 'Z'
print(lab)
print(f"Zelle (2,1) ist mit {lab[2,1].mark} markiert")

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).

lab[1,1].oeffneMauer(0)
lab[2,1].oeffneMauer(1)

Ist der zweite, optionale Parameter False, wird die Mauer geschlossen:

lab[2,1].oeffneMauer(1, False)

Labyrinthe speichern und einlesen

Von Datei laden

from laby import Laby
from zelle import Zelle
 
lab = Laby.load("labs/10x07-06.txt")  # Mit Angabe des Unterordners vor dem /
print(lab)

In Datei speichern

# l enthält eine Instanz der Klasse Laby
lab.save("meineloesung.txt")

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:

+---+---+---+---+---+
|   |   |   |   |   |
+---+---+   +---+---+
|   |   |   |   |   |
+---+---+   +---+---+
|                   |
+---+---+   +---+---+
|   |   |   |   |   |
+---+---+   +---+---+
|   |   |   |   |   |
+---+---+---+---+---+

Zusatzaufgabe: Schreiben Sie ein Programm so, dass es für alle Labyrinthgrössen funktioniert. Hinweise:

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)

Heizkörper

Produzieren Sie folgendes Labyrinth:

+---+---+---+---+---+---+---+---+
|                               |
+---+---+---+---+---+---+---+   +
|                               |
+   +---+---+---+---+---+---+---+
|                               |
+---+---+---+---+---+---+---+   +
|                               |
+   +---+---+---+---+---+---+---+
|                               |
+---+---+---+---+---+---+---+---+

Hinweis:

Zusatzaufgabe: Programm funktioniert für beliebige Labyrinthgrössen.

Text

Programmieren Sie folgende Ausgabe:

+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   | P | r | o | g | r | a | m | m | i | e | r | e | n |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   | m | a | c | h | t |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+
|   |   |   |   |   |   |   | S | p | a | s | s |   |   |   |   |   |   |   |   |
+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+---+

Hinweis: mit for buchstabe in "blabla": kann etwas für jeden Buchstaben wiederholt werden.

Zusatzaufgabe: Das Programm funktioniert mit beliebigen Texten als einzige Vorgabe

# 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