Übungen#
Übung 8.1
Erstellen Sie eine Klasse Auto
zur Verwaltung von Fahrzeuginformationen. Die Klasse soll folgende Attribute haben:
marke
(z.B. “VW”, “BMW”)modell
(z.B. “Golf”, “320i”)baujahr
(z.B. 2020)kilometerstand
(z.B. 45000)
Implementieren Sie die
__init__
-Methode, die alle vier Attribute beim Erstellen eines Objekts initialisiert.Erstellen Sie zwei Auto-Objekte mit unterschiedlichen Daten.
Geben Sie für beide Autos die Marke und den Kilometerstand aus.
Erhöhen Sie den Kilometerstand des ersten Autos um 1500 km und geben Sie den neuen Wert aus.
Lösung
class Auto:
def __init__(self, marke, modell, baujahr, kilometerstand):
self.marke = marke
self.modell = modell
self.baujahr = baujahr
self.kilometerstand = kilometerstand
# Zwei Auto-Objekte erstellen
auto1 = Auto("VW", "Golf", 2020, 45000)
auto2 = Auto("BMW", "320i", 2018, 82000)
# Marke und Kilometerstand ausgeben
print(f"Auto 1: {auto1.marke}, {auto1.kilometerstand} km")
print(f"Auto 2: {auto2.marke}, {auto2.kilometerstand} km")
# Kilometerstand erhöhen
auto1.kilometerstand = auto1.kilometerstand + 1500
print(f"\nAuto 1 nach der Fahrt: {auto1.kilometerstand} km")
Übung 8.2
Erweitern Sie die Klasse Auto
aus Übung 8.1 um zwei Methoden:
fahre(kilometer)
: Diese Methode erhält die gefahrenen Kilometer als Parameter und erhöht den Kilometerstand des Autos entsprechend.info()
: Diese Methode gibt eine Zeile mit allen wichtigen Informationen zum Auto zurück, z.B. “VW Golf (Baujahr 2020): 45000 km”.
Testen Sie beide Methoden mit mindestens einem Auto-Objekt.
Lösung
class Auto:
def __init__(self, marke, modell, baujahr, kilometerstand):
self.marke = marke
self.modell = modell
self.baujahr = baujahr
self.kilometerstand = kilometerstand
def fahre(self, kilometer):
"""Erhöht den Kilometerstand um die gefahrenen Kilometer"""
self.kilometerstand = self.kilometerstand + kilometer
def info(self):
"""Gibt eine formatierte Info-Zeile zum Auto zurück"""
return f"{self.marke} {self.modell} (Baujahr {self.baujahr}): {self.kilometerstand} km"
# Test der Methoden
auto1 = Auto("VW", "Golf", 2020, 45000)
# Info ausgeben
print(auto1.info())
# Eine Strecke fahren
auto1.fahre(250)
print(f"Nach 250 km Fahrt: {auto1.info()}")
# Noch eine Strecke fahren
auto1.fahre(1800)
print(f"Nach weiteren 1800 km: {auto1.info()}")
Übung 8.3
Erstellen Sie eine Klasse Artikel
für eine Einkaufsliste mit folgenden Attributen:
name
(z.B. “Milch”, “Brot”)preis
(Preis pro Stück in Euro)menge
(Anzahl der Artikel)
Implementieren Sie die
__init__
-Methode.Schreiben Sie eine Methode
gesamtpreis()
, die den Gesamtpreis für diesen Artikel berechnet (Preis × Menge) und zurückgibt.Schreiben Sie eine Methode
menge_aendern(neue_menge)
, die die Menge des Artikels auf einen neuen Wert setzt.Testen Sie Ihre Klasse: Erstellen Sie einen Artikel, geben Sie den Gesamtpreis aus, ändern Sie die Menge und geben Sie den neuen Gesamtpreis aus.
Lösung
class Artikel:
def __init__(self, name, preis, menge):
self.name = name
self.preis = preis
self.menge = menge
def gesamtpreis(self):
"""Berechnet den Gesamtpreis (Preis × Menge)"""
return self.preis * self.menge
def menge_aendern(self, neue_menge):
"""Ändert die Menge des Artikels"""
self.menge = neue_menge
# Test der Klasse
artikel1 = Artikel("Milch", 1.29, 3)
print(f"Artikel: {artikel1.name}")
print(f"Gesamtpreis für {artikel1.menge} Stück: {artikel1.gesamtpreis():.2f} Euro")
# Menge ändern
artikel1.menge_aendern(5)
print(f"\nNach Mengenänderung:")
print(f"Gesamtpreis für {artikel1.menge} Stück: {artikel1.gesamtpreis():.2f} Euro")
Übung 8.4
Erweitern Sie die Klasse Artikel
aus Übung 8.3 um eine Methode rabatt_anwenden(prozent)
, die einen prozentualen Rabatt auf den Preis anwendet.
Beispiel: Bei einem Artikel mit Preis 10.00 Euro und einem Rabatt von 20% soll der neue Preis 8.00 Euro betragen.
Implementieren Sie die Methode
rabatt_anwenden(prozent)
, die den Preis des Artikels entsprechend reduziert.Schreiben Sie eine weitere Methode
ist_guenstig()
, dieTrue
zurückgibt, wenn der Gesamtpreis unter 5.00 Euro liegt, sonstFalse
.Testen Sie beide Methoden mit einem Artikel-Objekt.
Lösung
class Artikel:
def __init__(self, name, preis, menge):
self.name = name
self.preis = preis
self.menge = menge
def gesamtpreis(self):
"""Berechnet den Gesamtpreis (Preis × Menge)"""
return self.preis * self.menge
def menge_aendern(self, neue_menge):
"""Ändert die Menge des Artikels"""
self.menge = neue_menge
def rabatt_anwenden(self, prozent):
"""Wendet einen prozentualen Rabatt auf den Preis an"""
self.preis = self.preis * (1 - prozent / 100)
def ist_guenstig(self):
"""Prüft, ob der Gesamtpreis unter 5 Euro liegt"""
return self.gesamtpreis() < 5.0
# Test der Methoden
artikel1 = Artikel("Schokolade", 2.50, 3)
print(f"Artikel: {artikel1.name}")
print(f"Preis pro Stück: {artikel1.preis:.2f} Euro")
print(f"Gesamtpreis: {artikel1.gesamtpreis():.2f} Euro")
print(f"Ist günstig? {artikel1.ist_guenstig()}")
# Rabatt anwenden
print("\n20% Rabatt wird angewendet...")
artikel1.rabatt_anwenden(20)
print(f"Neuer Preis pro Stück: {artikel1.preis:.2f} Euro")
print(f"Neuer Gesamtpreis: {artikel1.gesamtpreis():.2f} Euro")
print(f"Ist günstig? {artikel1.ist_guenstig()}")
Übung 8.5
Erstellen Sie eine Klasse Buch
zur Verwaltung Ihrer persönlichen Bibliothek mit folgenden Attributen:
titel
(z.B. “1984”)autor
(z.B. “George Orwell”)seiten
(z.B. 328)gelesen
(Boolean: True oder False)
Implementieren Sie die
__init__
-Methode. Das Attributgelesen
soll standardmäßig aufFalse
gesetzt werden.Schreiben Sie eine Methode
als_gelesen_markieren()
, die das Buch als gelesen markiert.Schreiben Sie eine Methode
lesefortschritt(gelesene_seiten)
, die berechnet und zurückgibt, wie viel Prozent des Buches bereits gelesen wurden.Testen Sie Ihre Klasse mit mindestens einem Buch.
Lösung
class Buch:
def __init__(self, titel, autor, seiten):
self.titel = titel
self.autor = autor
self.seiten = seiten
self.gelesen = False # Standardmäßig noch nicht gelesen
def als_gelesen_markieren(self):
"""Markiert das Buch als gelesen"""
self.gelesen = True
def lesefortschritt(self, gelesene_seiten):
"""Berechnet den Lesefortschritt in Prozent"""
prozent = (gelesene_seiten / self.seiten) * 100
return prozent
# Test der Klasse
buch1 = Buch("1984", "George Orwell", 328)
print(f"Buch: {buch1.titel} von {buch1.autor}")
print(f"Seiten: {buch1.seiten}")
print(f"Gelesen: {buch1.gelesen}")
# Lesefortschritt prüfen
print(f"\nLesefortschritt bei 100 Seiten: {buch1.lesefortschritt(100):.1f}%")
print(f"Lesefortschritt bei 250 Seiten: {buch1.lesefortschritt(250):.1f}%")
# Als gelesen markieren
buch1.als_gelesen_markieren()
print(f"\nBuch wurde fertig gelesen: {buch1.gelesen}")
Übung 8.6
Implementieren Sie für die Klasse Buch
aus Übung 8.5 die __str__
-Methode, damit Bücher schön formatiert ausgegeben werden können.
Die __str__
-Methode soll eine Zeile im folgenden Format zurückgeben:
Wenn das Buch noch nicht gelesen wurde: “Titel von Autor (Seiten S.) - noch nicht gelesen”
Wenn das Buch gelesen wurde: “Titel von Autor (Seiten S.) - ✓ gelesen”
Testen Sie Ihre Implementierung mit zwei Büchern: einem gelesenen und einem ungelesenen.
Lösung
class Buch:
def __init__(self, titel, autor, seiten):
self.titel = titel
self.autor = autor
self.seiten = seiten
self.gelesen = False
def __str__(self):
"""Gibt eine formatierte Beschreibung des Buches zurück"""
if self.gelesen:
status = "✓ gelesen"
else:
status = "noch nicht gelesen"
return f"{self.titel} von {self.autor} ({self.seiten} S.) - {status}"
def als_gelesen_markieren(self):
"""Markiert das Buch als gelesen"""
self.gelesen = True
def lesefortschritt(self, gelesene_seiten):
"""Berechnet den Lesefortschritt in Prozent"""
prozent = (gelesene_seiten / self.seiten) * 100
return prozent
# Test der __str__-Methode
buch1 = Buch("1984", "George Orwell", 328)
buch2 = Buch("Der Prozess", "Franz Kafka", 256)
# Buch 2 als gelesen markieren
buch2.als_gelesen_markieren()
# Ausgabe mit print (verwendet automatisch __str__)
print(buch1)
print(buch2)
# Auch in einer Liste funktioniert es
meine_buecher = [buch1, buch2]
print("\nMeine Bücher:")
for buch in meine_buecher:
print(f"- {buch}")
Übung 8.7
Erstellen Sie eine kleine Bücherverwaltung mit Listen von Objekten. Verwenden Sie dafür die Klasse Buch
aus den vorherigen Übungen.
Erstellen Sie eine Liste mit mindestens 5 verschiedenen Büchern. Markieren Sie einige davon als gelesen.
Schreiben Sie eine Funktion
finde_buch_nach_titel(buecher, titel)
, die in der Liste nach einem Buch mit dem angegebenen Titel sucht und das Buch-Objekt zurückgibt (oderNone
, falls nicht gefunden).
Tipp: Mit der Methode.lower()
können Sie einen String in Kleinbuchstaben umwandeln, was Vergleiche vereinfacht.Schreiben Sie eine Funktion
ungelesene_buecher(buecher)
, die eine neue Liste mit allen noch nicht gelesenen Büchern zurückgibt.Schreiben Sie eine Funktion
dicke_buecher(buecher, min_seiten)
, die alle Bücher zurückgibt, die mindestens die angegebene Seitenzahl haben.Testen Sie alle drei Funktionen mit Ihrer Bücherliste.
Lösung
class Buch:
def __init__(self, titel, autor, seiten):
self.titel = titel
self.autor = autor
self.seiten = seiten
self.gelesen = False
def __str__(self):
if self.gelesen:
status = "✓ gelesen"
else:
status = "noch nicht gelesen"
return f"{self.titel} von {self.autor} ({self.seiten} S.) - {status}"
def als_gelesen_markieren(self):
self.gelesen = True
def finde_buch_nach_titel(buecher, titel):
"""Sucht ein Buch nach Titel"""
for buch in buecher:
if buch.titel.lower() == titel.lower():
return buch
return None
def ungelesene_buecher(buecher):
"""Gibt eine Liste aller ungelesenen Bücher zurück"""
ungelesen = []
for buch in buecher:
if not buch.gelesen:
ungelesen.append(buch)
return ungelesen
def dicke_buecher(buecher, min_seiten):
"""Gibt alle Bücher zurück, die mindestens min_seiten haben"""
dick = []
for buch in buecher:
if buch.seiten >= min_seiten:
dick.append(buch)
return dick
# Bücherliste erstellen
bibliothek = [
Buch("1984", "George Orwell", 328),
Buch("Der Prozess", "Franz Kafka", 256),
Buch("Die Verwandlung", "Franz Kafka", 96),
Buch("Harry Potter", "J.K. Rowling", 336),
Buch("Der Hobbit", "J.R.R. Tolkien", 310)
]
# Einige als gelesen markieren
bibliothek[1].als_gelesen_markieren() # Der Prozess
bibliothek[2].als_gelesen_markieren() # Die Verwandlung
bibliothek[4].als_gelesen_markieren() # Der Hobbit
# Test: Buch nach Titel suchen
print("=== SUCHE NACH TITEL ===")
gesuchtes_buch = finde_buch_nach_titel(bibliothek, "1984")
if gesuchtes_buch:
print(f"Gefunden: {gesuchtes_buch}")
else:
print("Buch nicht gefunden")
# Test: Ungelesene Bücher finden
print("\n=== UNGELESENE BÜCHER ===")
ungelesen = ungelesene_buecher(bibliothek)
print(f"Anzahl ungelesener Bücher: {len(ungelesen)}")
for buch in ungelesen:
print(f"- {buch}")
# Test: Dicke Bücher finden (mindestens 300 Seiten)
print("\n=== BÜCHER MIT MINDESTENS 300 SEITEN ===")
dick = dicke_buecher(bibliothek, 300)
for buch in dick:
print(f"- {buch}")
Übung 8.8
Erstellen Sie ein vollständiges Programm zur Verwaltung einer Einkaufsliste mit der Klasse Artikel
aus den vorherigen Übungen.
Anforderungen:
Erweitern Sie die Klasse
Artikel
um die__str__
-Methode, die einen Artikel im Format “Name: Menge × Preis Euro = Gesamtpreis Euro” ausgibt (z.B. “Milch: 3 × 1.29 Euro = 3.87 Euro”).Erstellen Sie eine Liste mit mindestens 5 verschiedenen Artikeln für Ihren Einkauf.
Schreiben Sie folgende Funktionen:
zeige_einkaufsliste(artikel_liste)
: Gibt alle Artikel formatiert ausgesamtkosten(artikel_liste)
: Berechnet die Gesamtkosten aller Artikelteuerster_artikel(artikel_liste)
: Findet den Artikel mit dem höchsten Gesamtpreisartikel_unter_preis(artikel_liste, max_preis)
: Gibt alle Artikel zurück, deren Gesamtpreis unter dem angegebenen Maximalpreis liegt
Testen Sie Ihr Programm:
Zeigen Sie die komplette Einkaufsliste an.
Geben Sie die Gesamtkosten aus.
Finden und zeigen Sie den teuersten Artikel.
Listen Sie alle Artikel auf, die weniger als 5 Euro kosten.
Lösung
class Artikel:
def __init__(self, name, preis, menge):
self.name = name
self.preis = preis
self.menge = menge
def __str__(self):
"""Formatierte Ausgabe des Artikels"""
return f"{self.name}: {self.menge} × {self.preis:.2f} Euro = {self.gesamtpreis():.2f} Euro"
def gesamtpreis(self):
"""Berechnet den Gesamtpreis (Preis × Menge)"""
return self.preis * self.menge
def menge_aendern(self, neue_menge):
"""Ändert die Menge des Artikels"""
self.menge = neue_menge
def rabatt_anwenden(self, prozent):
"""Wendet einen prozentualen Rabatt auf den Preis an"""
self.preis = self.preis * (1 - prozent / 100)
def zeige_einkaufsliste(artikel_liste):
"""Gibt alle Artikel formatiert aus"""
print("=== EINKAUFSLISTE ===")
for artikel in artikel_liste:
print(f"- {artikel}")
def gesamtkosten(artikel_liste):
"""Berechnet die Gesamtkosten aller Artikel"""
summe = 0
for artikel in artikel_liste:
summe = summe + artikel.gesamtpreis()
return summe
def teuerster_artikel(artikel_liste):
"""Findet den Artikel mit dem höchsten Gesamtpreis"""
teuerster = artikel_liste[0]
for artikel in artikel_liste:
if artikel.gesamtpreis() > teuerster.gesamtpreis():
teuerster = artikel
return teuerster
def artikel_unter_preis(artikel_liste, max_preis):
"""Gibt alle Artikel zurück, deren Gesamtpreis unter max_preis liegt"""
guenstige = []
for artikel in artikel_liste:
if artikel.gesamtpreis() < max_preis:
guenstige.append(artikel)
return guenstige
# Einkaufsliste erstellen
einkaufsliste = [
Artikel("Milch", 1.29, 3),
Artikel("Brot", 2.49, 2),
Artikel("Butter", 2.99, 1),
Artikel("Äpfel", 0.49, 8),
Artikel("Käse", 3.99, 2)
]
# Komplette Einkaufsliste anzeigen
zeige_einkaufsliste(einkaufsliste)
# Gesamtkosten berechnen und ausgeben
gesamt = gesamtkosten(einkaufsliste)
print(f"\nGesamtkosten: {gesamt:.2f} Euro")
# Teuersten Artikel finden
teuerster = teuerster_artikel(einkaufsliste)
print(f"\nTeuerster Artikel: {teuerster}")
# Günstige Artikel finden (unter 5 Euro)
print("\n=== ARTIKEL UNTER 5 EURO ===")
guenstige = artikel_unter_preis(einkaufsliste, 5.0)
for artikel in guenstige:
print(f"- {artikel}")