Übungen
Aufgabe 1: Eine Liste durchlaufen
Jede natürliche Zahl lässt sich eindeutig als Produkt von Primzahlen darstellen. So kann etwa die Zahl 84 wie folgt dargestellt werden: 84 = 2*2*3*7.
Die Primfaktorzerlegung einer Zahl soll hier mit Hilfe einer Liste dargestellt werden. Für die Zahl 84
ist dies die Liste [2, 2, 3, 7]
.
Will man aus dieser Zahlenliste die dargestellte Zahl ermitteln, so muss man das Produkt der Listenelemente
bestimmen.
Die folgende Funktion produkt
leistet diese Produktberechnung.
def produkt(L):
p = 1
for z in L:
p = p * z
return p
(a) Überzeuge dich mit verschiedenen Testaufrufen, dass die Funktion tatsächlich das Gewünschte leistet.
(b) Kern der Produktberechnung ist die for
-Anweisung. Ergänze Ausgabeanweisungen, die die
jeweiligen Werte der Variablen z
und p
ausgeben, um den Berechnungsablauf verfolgen
zu können.
(c) Was müsste man abändern, wenn man statt einer Produktberechnung eine Summenberechnung vornehmen wollte?
(d) Eine Funktion anzahl
soll bestimmen, wie oft ein übergebenes Element in einer übergebenen
Liste vorkommt. Mit einer solchen Funktion könnte man bestimmen, wie oft ein Primfaktor in der
Primfaktordarstellung vorkommt.
(e) Die Primfaktorzerlegung einer Zahl kann auch mit Potenzen geschrieben werden:
84 = 22*31*50*71. Eine solche Darstellung mit Potenzen könnte man
in Listenform so beschreiben: [[2, 2], [3, 1], [5, 0], [7, 1]]
. Wie müsste man die Deklaration der
Funktion produkt
abändern, damit sie solche Primfaktordarstellungen in entsprechende Zahlen
umrechnen kann?
Aufgabe 2: Eine Liste auf eine Eigenschaft untersuchen
(a) Was leistet die folgende Funktion istElement
? Kannst du es durch Analyse des Quelltextes
erschließen? Überprüfe deine Vermutung durch geeignete Tests.
def istElement(e, L):
trifftzu = False
for z in L:
if z == e:
trifftzu = True
return trifftzu
(b) Eine Funktion soll überprüfen, ob eine Zahlenliste nur positive Zahlen enthält.
(c) Eine Funktion soll überprüfen, ob ein Element in einer Liste mehrfach vorkommt.
Aufgabe 3: Eine neue Liste aufbauen
(a) Was leistet die folgende Funktion loeschen
? Kannst du es durch Analyse des Quelltextes
erschließen? Überprüfe deine Vermutung durch geeignete Tests.
def loeschen(e, L):
H = []
for z in L:
if z != e:
H = H + [z]
return H
(b) Eine Funktion soll alle negativen Zahlen aus einer Zahlenliste löschen und diese neue Liste als Ergebnis zurückgeben.
(c) Eine Funktion soll alle Zahlen aus einer Zahlenliste verdoppeln und diese neue Liste als Ergebnis zurückgeben.
Aufgabe 4: Eine Liste über die Elementnummern durchlaufen
(a) Was leistet die folgende Funktion ersteNummer
? Kannst du es durch Analyse des Quelltextes
erschließen? Überprüfe deine Vermutung durch geeignete Tests.
def ersteNummer(e, L):
n = -1
i = 0
while (i < len(L)) and (n < 0):
if e == L[i]:
n = i
i = i + 1
return n
(b) Eine Funktion soll die letzte Indexnummer eines Elements in einer Liste zurückgeben.
(c) Eine Funktion soll die Liste aller Indexnummern eines Elements in einer Liste zurückgeben.
Aufgabe 5: Listenoperationen
(a) Was leisten die folgenden Funktionen? Kannst du es durch Analyse des Quelltextes erschließen? Überprüfe deine Vermutung durch geeignete Tests.
def erstes(L):
return L[0]
def ohneErstes(L):
return L[1:]
def mitErstem(e, L):
return ([e]+L)
(b) Entwickle analog die Funktionen letztes
, ohneLetztes
und
mitLetztem
.
Aufgabe 6: Eine etwas schwierigere Aufgabe
Entwickle eine Funktion ggt
, die aus zwei Primfaktordarstellungen in Listenform (siehe
Aufgabe 1)
den größten gemeinsamen Teiler der entsprechenden Zahlen bestimmt.