Übungsaufgaben

Hausaufgabe: Konto-Klasse erweitern

  1. Die definierten mutierenden Methoden der Konto-Klasse können durch die Angabe negativer Beträge zweckentfremdet werden. Erweitern Sie sie so, dass nur positive Beträge berücksichtigt werden. Passen Sie außerdem die Methode zum Abheben so an, dass nur gedeckte Beträge abgehoben werden können. Damit aufrufender Programmcode überprüfen kann, ob eine Transaktion erfolgreich war, sollen die geänderten Methoden einen entsprechenden Wahrheitswert zurück liefern.

  2. Fügen Sie eine Methode zum Verzinsen hinzu, die das Guthaben anhand eines festen Zinssatzes erhöht. Der Zinssatz soll bei der Konstruktion eines Konto-Objektes angegeben werden, wie die folgenden Aufrufe deutlich machen.

    >>> k = Konto(0.04)
    Guthaben: 0.0
    >>> k.einzahlen(100)
    >>> k.verzinsen
    Guthaben: 104.0
    

Aufgabe: Stack-Klasse implementieren

Definieren Sie eine Klasse Stack zur Implementierung von Sammlungen nach dem LIFO-Prinzip (last-in, first-out): Wie auf einem Stapel kann das Element, dass zuletzt eingefügt wurde, als erstes entnommen werden. Implementieren Sie die folgenden Methoden:

  • is_empty liefert einen Wahrheitswert, der angibt, ob der zugehörige Stack leer ist;
  • top liefert, falls der Stack nicht leer ist, das oberste Element des Stacks ohne den Stack zu manipulieren;
  • push legt ein übergebenes Element oben auf den Stack;
  • pop nimmt ein Element von einem nicht leeren Stack und liefert es zurück.

Definieren Sie außerdem Methoden __init__, __str__ und __repr__, so dass Stacks wie nachfolgend gezeigt in der interaktiven Python-Umgebung verwendet werden können.

>>> s = Stack()
>>> s
Stack:
>>> s.is_empty()
True
>>> s.push(42)
Stack: 42
>>> s.is_empty()
False
>>> s.top()
42
>>> s.push(43)
Stack: 42 43
>>> s.top()
=> 43
>>> s.pop()
43
>>> s
Stack: 42

Aufgabe: Queue-Klasse implementieren

Definieren Sie eine Klasse Queue zur Implementierung von Sammlungen nach dem FIFO-Prinzip (first-in, first-out): Wie in einer Warteschlange kann das Element, das als erstes eingefügt wurde, als erstes entnommen werden. Implementieren Sie die folgenden Methoden:

  • is_empty liefert einen Wahrheitswert zurück, der angibt, ob die Queue leer ist;
  • first liefert das erste Element einer nicht leeren Warteschlange, ohne sie zu manipulieren;
  • enqueue fügt der Warteschlange hinten ein übergebenes Element hinzu;
  • dequeue entfernt das vorderste Element und gibt es zurück.

Definieren Sie darüber hinaus Methoden, __init__, __str__ und __repr__, so dass Queues wie nachfolgend gezeigt in der interaktiven Python-Umgebung verwendet werden können.

>>> q = Queue()
>>> q
Queue:
>>> q.is_empty()
True
>>> q.enqueue(42)
Queue: 42
>>> q.is_empty()
False
>>> q.first()
42
>>> q.enqueue(43)
Queue: 42 43
>>> q.first
42
>>> q.dequeue()
42
>>> q.first()
43