Zum Inhalt springen
BetaEN
Lektion 28 von 35Python

Python · Lektion 28 · 60 Minuten

Boss-Level: Die Bibliothek

Das lernst du

  • Eine eigene Klasse mit mehreren Methoden entwerfen
  • Fehler mit eigenen Ausnahmen melden
  • Daten in einer Datei speichern und wieder laden

Der Boss der Fortgeschrittenen

In der Fortgeschrittenen-Stufe hast du gelernt, Fehler abzufangen, Dateien zu schreiben, eigene Klassen zu bauen und Code zu testen. Jetzt kommt alles zusammen: ein kleines Verwaltungsprogramm, wie es echte Bibliotheken benutzen.

Erinnerung: Ausnahmen selbst auslösen

Eine gute Klasse meldet Fehler laut, statt still das Falsche zu tun:

class Tresor:
    def __init__(self, code):
        self.code = code
        self.offen = False

    def oeffnen(self, versuch):
        if versuch != self.code:
            raise ValueError("Falscher Code!")
        self.offen = True


t = Tresor(1234)
try:
    t.oeffnen(1111)
except ValueError as fehler:
    print("Abgefangen:", fehler)

Erinnerung: Dateien schreiben

with open("liste.txt", "w") as datei:
    for name, alter in [("Ana", 12), ("Ben", 13)]:
        datei.write(f"{name};{alter}\n")

print(open("liste.txt").read())

Strategie für den Boss

  1. Erst die Daten: self.buecher ist ein Dictionary Titel → True/False. Alles andere arbeitet damit.
  2. Dann Methode für Methode: Teste jede sofort mit ein paar Zeilen unter der Klasse.
  3. Fehlerfälle zuletzt: Was passiert bei unbekannten oder schon verliehenen Büchern?

Weiterbauen: Eine Methode laden(dateiname), die eine gespeicherte Datei wieder einliest – dann überlebt deine Bibliothek sogar das Programmende.

Deine Aufgabe

Jetzt bist du dran

Baue die Klasse Bibliothek. hinzufuegen(titel) nimmt ein Buch auf (verfügbar). ausleihen(titel) leiht es aus – unbekannte Titel lösen einen KeyError aus, schon verliehene einen ValueError. zurueckgeben(titel) macht es wieder verfügbar. verfuegbar() gibt eine sortierte Liste der verfügbaren Titel zurück. speichern(dateiname) schreibt pro Buch eine Zeile Titel;ja oder Titel;nein (verfügbar oder nicht).

class Bibliothek:
    def __init__(self):
        self.buecher = {}  # Titel → True (verfügbar) oder False (verliehen)

    def hinzufuegen(self, titel):
        pass

    def ausleihen(self, titel):
        pass

    def zurueckgeben(self, titel):
        pass

    def verfuegbar(self):
        pass

    def speichern(self, dateiname):
        pass


bib = Bibliothek()
bib.hinzufuegen("Momo")
bib.hinzufuegen("Krabat")
bib.ausleihen("Momo")
print(bib.verfuegbar())

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:

class Bibliothek:
    def __init__(self):
        self.buecher = {}  # Titel → True (verfügbar) oder False (verliehen)

    def hinzufuegen(self, titel):
        self.buecher[titel] = True

    def ausleihen(self, titel):
        if titel not in self.buecher:
            raise KeyError(titel)
        if not self.buecher[titel]:
            raise ValueError(f"{titel} ist schon verliehen")
        self.buecher[titel] = False

    def zurueckgeben(self, titel):
        self.buecher[titel] = True

    def verfuegbar(self):
        return sorted(titel for titel, frei in self.buecher.items() if frei)

    def speichern(self, dateiname):
        with open(dateiname, "w") as datei:
            for titel, frei in self.buecher.items():
                datei.write(f"{titel};{'ja' if frei else 'nein'}\n")


bib = Bibliothek()
bib.hinzufuegen("Momo")
bib.hinzufuegen("Krabat")
bib.ausleihen("Momo")
print(bib.verfuegbar())