Text als Bilder ist doof. Hier ist ein bisschen Text als Text:
c) Caching (4 Punkte)
In dieser Aufgabe sollen Sie eine Funktion implementieren, die einen Cache benutzt. Caching ist ein Vefahren, bei dem man bereits berechnete Ergebnisse wiedervenvendet anstatt sie immer wieder auts Neue zu berechnen.
Schreiben Sie eine Funktion calc_range, die zwei Argumente lower und higher vom Typ int erwartet. Die Funktion soll eine list mit den Einträgen lower, lower + 1, …, higher - 2, higher - 1 zurückgeben. Beispiel: Für lower=2 und higher=5 wäre das Ergebnis [2, 3, 4].
Wenn calc_range zweimal mit den gleichen Argumenten aufgerufen wird, soll beide Male das selbe Listenobjekt zurückgegeben werden, d.h. beim zweiten Mal wird dieses nicht mehr neu erzeugt, sondern wiederverwendet. Verwenden sie dazu das Dict cache aus der folgenden Zelle, um sich Rückgabewerte zu bestimmten Funktionsparametern für erneute Aufrufe zu merken.
Code: Alles auswählen
cache = dict()
def calc_range(lower: int, higher: int):
...
# Diese Zelle nicht verändern!
cache = dict()
res_1 = calc_range(3, 5)
res_2 = calc_range(3, 5)
assert(res_1 == []
assert(res_1 is res_2)
Schreiben Sie eine Funktion filter_list, die ein Argument elements vom Typ list erwartet. filter_list erstellt eine neue Liste, die nur die Elemente vom Typ int oder float enthält, und die größergleich 1 und kleiner als 50 sind. Sie müssen eine For-schleife verwenden, um diese Aufgabe zu
lösen.
Code: Alles auswählen
def filter_list(elements):
newlist=[] # die Funktion erstellt eine neue Liste
for i in range(len(elements)): # die for-schLeife Läuft so lange wie die Liste vom Eingabewert lang ist
if type(elements[i]) == int and float: # wenn ein Element in der Liste ein Integer oder Float ist
if elements[i] >= 1 and elements[i] <50: # und wenn das Ausgewählte Element größer 1 und kleiner 50 ist
newlist.append(elements[i]) # dann wird das Element aus der Liste der Eingabeliste in die neue Liste hinzugefügt
return newlist # die neue Liste wird zurückgegeben
# Diese zelle nicht verändern!
assert filter_list([0,10,55]) == [10]
assert filter_list([10,"100",10]) == [10,10]
# Die Eingabeliste darf sich nicht ändern
x = [20, 30, 60]
filter_list(x)
assert x == [20, 30, 60]
c) Die Tücken des Iterierens (2 Punkte)
Schreiben Sie eine Funktion filter_1ist2, die genauso funktioniert, wie die Funktion aus Teilaufgabe b). Allerdings soll diesmal nicht eine neue Liste erstellt werden, sondern die bestehende Liste geändert werden. Die Funktion darf kein Ergebnis per return zurückgeben.
Code: Alles auswählen
def filter_1ist2(elements):
for i in range(len(elements)):
if type(elements[i]) == int and float:
if elements[i] >= 1 and elements[i] <50:
elements.remove(i)
a) Konvertierung von String zu Liste (2 Punkte)
Schreiben Sie eine Funktion str2list, die einen str als Argument erwartet. Die Funktion soll den String in einzelne Zeichen zerlegen und eine Liste mit all diesen Zeichen zurückgeben.
Beispiel: Für die Eingaben "Liste" ist die korrekte Ausgabe ["L", "i", "s", "t", "e"].
Code: Alles auswählen
def str2list(str_arg):
li=[]
for x in str_arg:
return li.append(x)
# Diese zelle nicht verändern!
assert str2list("abcd") == ["a", "b", "c", "d"]
b) Konkatenation von Iterables (3 Punkte)
Schreiben Sie eine Funktion combine, die zwei Argumente left und right erwartet. left und right können irgendeinen der Typen str, tupel oder list haben. Left und right müssen nicht notwendigerweise den gleichen Typ haben.
Geben Sie eine list zurück. welche die Elemente von left gefolgt von den Elementen aus right enthält.
Beispiel: Für die Eingaben (1, 2, 3) und "abc" ist die korrekte Ausgabe [1, 2, 3, "a", "b", "c"].
c) Slicing (3 Punkte)
Schreiben Sie eine Funktion sliceit, die ein Argument arg vom Typ list oder tuple sowie zwei weitere Argumente lower und upper vom Typ int erwartet. Die Funktion soll eine neue Liste zurückgeben, die alle Elemente arg
enthält für die lower ≤ i < upper gilt.
Beachten Sie: Die Elemente einer Liste oder eines Toples werden ab 0 nummeriert. Beispielsweise ist für l=["a", "b", "c"] der Ausdruck l[0] das erste Element, also "a".
Beispiel: Der Aufruf von sliceit(["a", "b", "c"], 0, 1) gibt ["a"] zurück.