Übungen
Aufgabe 1: Speicheradressen von Objekten
Der folgende Python-Dialog benutzt die Klasse Konto
des Moduls konto.py
(siehe _konto.txt).
>>> k1 = Konto(6)
>>> k2 = k1
>>> k1
<__main__.Konto object at 0x01DA7F10>
>>> k2
<__main__.Konto object at 0x01DA7F10>
>>> k2 = Konto(8)
>>> k2
<__main__.Konto object at 0x01DB5CB0>
Wenn man den Objektbezeichner vom Python-Interpreter auswerten lässt, dann wird der vom Bezeichner verwaltete Wert angezeigt. Warum zeigt der Python-Dialog, dass hier Zeiger verwaltet werden?
Aufgabe 2: Verwaltung von Bruch-Objekten
Der folgende Python-Dialog benutzt die Klasse Bruch
des Moduls bruch.py
(siehe _bruch.txt).
>>> b1 = Bruch(1, 2)
>>> b2 = Bruch(1, 2)
>>> b3 = b2
>>> b1.darstellen()
'1/2'
>>> b2.darstellen()
'1/2'
>>> b3.darstellen()
???
>>> b1.add(b2)
>>> b2.add(b1)
>>> b3.add(b2)
>>> b2.add(b1)
>>> b1.add(b3)
>>> b1.darstellen()
???
>>> b2.darstellen()
???
>>> b3.darstellen()
???
Was muss jeweils anstelle der drei Fragezeichen stehen? Kannst du es direkt angeben, ohne den Dialog durchzuführen? Überprüfe deine Vermutungen. Erkläre die Ergebnisse mit geeigneten Objektdiagrammen.
Aufgabe 3: Listenverarbeitung
Listen sind in Python Objekte der Klasse list
. Sie verhalten sich daher auch
wie Objekte. Der folgende Python-Dialog zeigt das.
>>> L = [1, 2, 3]
>>> M = L
>>> M[0] = 4
>>> M
[4, 2, 3]
>>> L
[4, 2, 3]
>>> M = [4, 2, 3]
>>> M[1] = 5
>>> M
[4, 5, 3]
>>> L
[4, 2, 3]
>>> L = M
>>> M[2] = 6
>>> L
[4, 5, 6]
>>> M
[4, 5, 6]
(a) In welchen Schritten wird im gezeigten Dialog jeweils ein neues Objekt erzeugt?
(b) In welchen Schritten wird nur der Wert eines bestehendes Objekts verändert?
(c) In welchem Schritten werden Zeiger gesetzt?
Aufgabe 4: Listenverarbeitung
Die Funktion mitNeuemErsten
soll dazu dienen, in einer Liste das erste Element auszutauschen.
Vegleiche die beiden folgenden Implementierungen und erkläre das unterschiedliche Verhalten.
Version 1:
def mitNeuemErsten(liste, element):
liste[0] = element
return liste
L = [1, 2, 3]
M = mitNeuemErsten(L, 0)
print(L)
print(M)
Version 2:
def mitNeuemErsten(liste, element):
hilf = [element] + liste[1:]
return hilf
L = [1, 2, 3]
M = mitNeuemErsten(L, 0)
print(L)
print(M)