Exkurs - Listenoperationen selbst definieren
Listenoperationen
Bei der automatisierten Verwaltung und Versendung von Newsletter ist es günstig, wenn unterschiedliche Operationen zur Verarbeitung von Listen mit E-Mail-Adressen zur Verfügung stehen. Mit solchen Operationen sollte es z.B. möglich sein, auf einfache Weise neue E-Mail-Adressen hinzuzufügen oder auch vohandene E-Mail-Adressen wieder zu löschen.
Programmiersysteme wie Python stellen in der Regel eine Reihe vordefinierter Operationen zur
Verarbeitung von Listen zur Verfügung. So kann man in Python die Operation len
zur
Bestimmung der Anzahl der Listenelemente und die Operation +
zum
Aneinanderhängen von Listen benutzen.
>>> listeAdressen = [ 'amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de' ] >>> len(listeAdressen) 7 >>> listeAdressen = listeAdressen + ['tom.brand@schule.de'] >>> listeAdressen ['amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de', 'tom.brand@schule.de']
Zur flexiblen Verarbeitung von Listen sind weitere Operationen wünschenswert. Im Folgenden wird gezeigt, wie man sich Listenoperationen selbst definieren kann.
Operationen zur Listenverarbeitung werden dabei mit Hilfe von Funktionen realisiert. Wir werden versuchen, die Listenoperationen als flexibel verwendbare Bausteine zu konzipieren. Das hat den Vorteil, dass man sie in vielen verschiedenen Anwendungssituationen benutzen kann. Wir werden daher zunächst vom Kontext "Newsletter" absehen und neue Operationen zur Listenverarbeitung möglichst allgemein festlegen.
Bausteine zur Listenverarbeitung konzipieren und realisieren
Eine häufig benötigte Opertion zur Listenverarbeitung ist das Einfügen eines Elements
am Anfang der Liste. Diese Operation soll mit einer neu zu definierenden Funktion
mitErstemElement
realisiert werden.
Das Verhalten der Funktion mitErstemElement
lässt sich gut mit einem
Black-Box-Diagramm verdeutlichen.
Der Funktion mitErstemElement
werden zwei Daten - das einzufügende Element und
eine Liste - zur Verarbeitung übergeben. Die Funktion gibt als Ergebnis die erweiterte
Liste zurück.
Als nächstes muss die Funktion mitErstemElement
definiert werden. Der folgende
Python-Quelltext zeigt eine Funktionsdefinition, bei der Testfälle zur Verhaltensbeschreibung
integriert sind. Beachte, dass diese Verhaltensbeschreibung nur als Zusatzinformation hinzugefügt
ist und nicht zur Berechnung des Funktionswerts beiträgt.
def mitErstemElement(element, liste): """ >>> mitErstemElement(3, [25, 40, 44, 1, 45, 21]) [3, 25, 40, 44, 1, 45, 21] >>> mitErstemElement(7, []) [7] """ neueListe = [element] + liste return neueListe
Die neu definierte Funktion mitErstemElement
kann man jetzt im Python-Ausführfenster
interaktiv testen, sofern sie vorher (z.B. durch einmaliges Ausführen) in das Python-Ausführsystem
integriert wurde.
>>> adressen = [ 'amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de' ] >>> mitErstemElement('momo7@online.de', adressen) ['momo7@online.de', 'amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de'] >>> adressen ['amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de'] >>> adressen = mitErstemElement('momo7@online.de', adressen) >>> adressen ['momo7@online.de', 'amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de']
Man kann natürlich auch ein eigenes Testprogramm zur Überprüfung der Funktionsdefinition entwickeln.
def mitErstemElement(element, liste): """ >>> mitErstemElement(3, [25, 40, 44, 1, 45, 21]) [3, 25, 40, 44, 1, 45, 21] >>> mitErstemElement(7, []) [7] """ neueListe = [element] + liste return neueListe # Test adressen = [ 'amueller@gmx.de', 'carla2@hotmail.org', 'herbert.fluhr@web.de', 'petra@dahm.de', 'ewen@t-online.de', 't_schmidt@web.de', 'nicole.weber@gmx.de' ] print(adressen) adressen = mitErstemElement('momo7@online.de', adressen) print(adressen)
Python ermöglicht es zudem, das Verhalten einer Funktion direkt zu testen, wenn man Testfälle wie beschrieben als Zusatzinformation in die Funktionsdefinion integriert.
def mitErstemElement(element, liste): """ >>> mitErstemElement(3, [25, 40, 44, 1, 45, 21]) [3, 25, 40, 44, 1, 45, 21] >>> mitErstemElement(7, []) [7] """ neueListe = [element] + liste return neueListe if __name__ == '__main__': from doctest import testmod testmod(verbose=True)
Aufgabe 1
Entwickle und teste analog Funktionen zur Realisierung der folgenden Listenoperationen:
(a) Mit einer geeigneten Listenoperation soll das erste Element einer Liste entfernt werden.
(b) Mit einer geeigneten Listenoperation soll ein neues Element am Ende einer Liste hinzugefügt werden.
(c) Mit einer geeigneten Listenoperation soll das letzte Element einer Liste entfernt werden.
(d) Mit einer geeigneten Listenoperation soll ein neues Element an eine bestimmte Stelle in eine Liste eingefügt werden. Wenn der Index bei der übergebenen Liste keinen Sinn ergibt (z.B. zu groß ist), dann soll das Element nicht eingefügt werden.
(e) Mit einer geeigneten Listenoperation soll ein Element, das an eine bestimmte Stelle in einer Liste steht, gelöscht werden. Wenn der Index bei der übergebenen Liste keinen Sinn ergibt (z.B. zu groß ist), dann soll kein Element gelöscht werden.
(f) Mit einer geeigneten Listenoperation soll ein Element aus einer Liste gelöscht werden. Wenn das Element mehrfach in der Liste vorkommt, dann sollen alle betreffenden Elemente gelöscht werden.