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

Ü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)
X

Fehler melden

X

Suche