Voraussetzungen
Du kennst die Inhalte aus Teil 19 und arbeitest mit einem lokalen Python-3-Interpreter (ab Python 3.10), beispielsweise in Thonny.
Das lernst du in dieser Lektion
- Anforderungen in Teilaufgaben zerlegen.
- Ein Menü mit Funktionen verbinden.
- Sollwerte für Prüfungen festlegen.
Was soll das fertige Programm können?
Wir bauen eine kleine Konsolenanwendung für einen lokalen Filamentbestand. Sie soll Rollen auflisten, neue Rollen hinzufügen, Verbrauch buchen und den Bestand als JSON speichern. Wir verwalten Material, Farbe und verbleibendes Filamentgewicht. Spulengewicht und Materialreste werden in dieser Übung nicht automatisch ermittelt; du gibst die Nettomenge selbst ein.
Nicht Bestandteil dieser ersten Version sind Druckeranbindung, Mehrbenutzerbetrieb oder eine grafische Oberfläche. So können wir die bisherigen Grundlagen in einem überschaubaren Programm zusammenführen.
Datenmodell festlegen
bestand = [
{"material": "PLA", "farbe": "Blau", "rest_g": 750.0},
{"material": "PETG", "farbe": "Schwarz", "rest_g": 420.0},
]
Die angezeigte Rollennummer entsteht aus der aktuellen Listenposition plus 1. Sie ist keine dauerhaft gespeicherte ID. Solange wir keine Rollen löschen oder umsortieren, reicht das für die Übung. Für eine spätere Anwendung mit Historie wären feste Kennungen sinnvoll.
Die Aufgaben trennen
| Funktion | Aufgabe |
|---|---|
anzeigen(bestand) |
Bestand verständlich ausgeben |
hinzufuegen(bestand) |
Eingaben prüfen und neue Rolle anfügen |
verbrauchen(bestand) |
Rolle auswählen und zulässige Menge abziehen |
laden(pfad) |
JSON lesen und Daten prüfen |
speichern(pfad, bestand) |
JSON schreiben und Ergebnis melden |
main() |
Daten laden und Menü steuern |
So können wir einen Fehler einem kleinen Bereich zuordnen. Die Funktionen erhalten die Daten als Parameter; eine veränderliche globale Bestandsliste brauchen wir nicht.
Erster lauffähiger Stand
Speichere dieses vollständige Zwischenprogramm als filament_start.py:
def anzeigen(bestand):
if not bestand:
print("Noch keine Rollen vorhanden.")
return
for nummer, rolle in enumerate(bestand, start=1):
print(f"{nummer}: {rolle['material']} / {rolle['farbe']} - {rolle['rest_g']:.1f} g")
def main():
bestand = [{"material": "PLA", "farbe": "Blau", "rest_g": 750.0}]
while True:
print("1: Anzeigen | 0: Beenden")
auswahl = input("Auswahl: ").strip()
if auswahl == "1":
anzeigen(bestand)
elif auswahl == "0":
break
else:
print("Unbekannte Auswahl.")
if __name__ == "__main__":
main()
Der Startblock ruft main() auf. anzeigen() erhält dieselbe Liste und liest deren Einträge. Bei leerem Bestand verhindert ein frühes return, dass unnötig weitergearbeitet wird. In diesem Zwischenstand werden Änderungen noch nicht gespeichert.
Vor der Erweiterung Prüffälle notieren
| Versuch | Erwartung |
|---|---|
| Leere Liste anzeigen | Verständlicher Hinweis |
| Eine Rolle anzeigen | Nummer 1, richtige Eigenschaften |
| Unbekannte Menüauswahl | Hinweis, Menü bleibt bedienbar |
| 74 g von 750 g abbuchen | 676 g verbleiben |
| Negativer oder zu hoher Verbrauch | Ablehnung, Bestand unverändert |
| Speichern und neu starten | Gleiche Rollen wieder vorhanden |
| Beschädigte JSON-Datei laden | Hinweis und Abbruch ohne Überschreiben |
Diese Erwartungsliste ist unsere einfache Prüfanleitung. Im nächsten Teil setzen wir die fehlenden Funktionen um und gehen die Fälle durch.
Mitmach-Aufgabe
Füge dem Anfangsbestand im Zwischenprogramm eine zweite Rolle hinzu. Teste beide Einträge und danach einen leeren Bestand. Notiere das Verhalten für eine unbekannte Menüauswahl.
Versuche die Aufgabe zuerst selbst. Vergleiche danach deinen Ansatz mit der Musterlösung. Andere Lösungen sind möglich, wenn sie dieselben Anforderungen erfüllen.
Musterlösung
bestand = [
{"material": "PLA", "farbe": "Blau", "rest_g": 750.0},
{"material": "PETG", "farbe": "Schwarz", "rest_g": 420.0},
]
Ergebnis prüfen
Ersetze damit die Bestandszuweisung innerhalb von main. Zwei Rollen erscheinen als 1 und 2. Bei bestand = [] wird der Leerhinweis ausgegeben.
Typische Stolperstellen
Der Zwischenstand und die vollständige Version aus Teil 21 sind getrennte Programme. Nummern im Menü entsprechen nicht den internen Listenindizes.
Was du jetzt kannst
- Anforderungen in Teilaufgaben zerlegen.
- Ein Menü mit Funktionen verbinden.
- Sollwerte für Prüfungen festlegen.
Passendes Cheatsheet
Zum Nachschlagen: Cheatsheet 09 – Funktionen und Rückgabewerte. Dort findest du auch den vorhandenen PDF-Download.
Im nächsten Teil
In Teil 21 geht es um Abschlussprojekt: deine eigene Filamentverwaltung. Verbinde die Kursgrundlagen zu einer vollständigen Konsolenanwendung mit Eingabeprüfung und JSON-Speicherung.
