Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

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.

black box

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.

black box

(b) Mit einer geeigneten Listenoperation soll ein neues Element am Ende einer Liste hinzugefügt werden.

black box

(c) Mit einer geeigneten Listenoperation soll das letzte Element einer Liste entfernt werden.

black box

(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.

black box

(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.

black box

(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.

black box
X

Fehler melden

X

Suche