Eigene Funktionen schreiben · Übung
Die Menüaktionen umstrukturieren
Bevor du das interaktive Menü neu aufbaust, lagerst du zwei seiner Aktionen mit festen Daten aus. Noch kein input(). So kannst du dich auf die Grenzen der Funktionen konzentrieren.
Die Einträge anzeigen
Der list-Zweig aus Kapitel 7 hatte zwei Pfade:
if len(items) == 0:
print("The list is empty.")
else:
number = 1
for item in items:
print(f"{number}. {item}")
number += 1
Verschiebe diese Arbeit in eine Funktion:
def show_items(items):
if len(items) == 0:
print("The list is empty.")
else:
number = 1
for item in items:
print(f"{number}. {item}")
number += 1
Die Liste wird beim Aufruf zu einem Argument:
show_items(books)
Innerhalb der Funktion verweist der Parameter items auf diese Liste. Für die Funktion spielt es keine Rolle, ob der aufrufende Code sie books, tasks oder places genannt hat.
Die Nachricht mit der Anzahl zurückgeben
Bei der Zählaktion ziehst du die Grenze etwas anders:
def count_message(items):
return f"Items stored: {len(items)}"
Diese Funktion erstellt Text und gibt ihn zurück. Der aufrufende Code gibt ihn aus:
print(count_message(books))
Warum verwenden wir in einer Lektion zwei Varianten?
Weil sich Funktionen nach ihren Aufgaben richten und nicht nach einer Regel, dass jede Funktion etwas ausgeben oder jede Funktion etwas zurückgeben muss. show_items ist ein Anzeigevorgang, der mehrere Zeilen ausgeben kann. count_message erstellt einen wiederverwendbaren Wert.
Die Liste bleibt beim aufrufenden Code
Die Funktionen erstellen die Sammlung nicht:
books = []
show_items(books)
books.append("Kindred")
books.append("A Wizard of Earthsea")
show_items(books)
print(count_message(books))
Der aufrufende Code bestimmt die Reihenfolge der Ereignisse. Die Funktionen übernehmen einzelne Vorgänge.
Erwartete Ausgabe:
The list is empty.
1. Kindred
2. A Wizard of Earthsea
Items stored: 2
Das ist eine kleine Version der abschließenden Umstrukturierung. Der Code auf der obersten Programmebene sagt, was passiert. Jede Funktion erklärt, wie eine Aktion funktioniert.
Warum erhält show_items die Liste als Parameter?
Aufgabe
Vervollständige beide Funktionen für die Menüaktionen.
show_items(items) muss:
The list is empty.ausgeben, wenn die Liste keine Einträge hat;andernfalls jeden Eintrag in einer nummerierten Zeile ausgeben, beginnend bei
1.
count_message(items) muss Folgendes zurückgeben:
Items stored: 2
mit der tatsächlichen Länge anstelle von 2.
Behalte die vorgegebenen Aufrufe bei. Erwartete Ausgabe:
The list is empty.
1. Kindred
2. A Wizard of Earthsea
Items stored: 2