763
27.5
Lösungen
Aufgabe 3
Schreiben Sie eine Prozedur (Funktion ohne return-Anweisung), die die Reihenfolge der
Objekte in einer Schlange genau umdreht. Verwenden Sie als Hilfsobjekt einen Stack.
Aufgabe 4
Zur Vorbereitung einer Party überlegt sich Jenny, welche Gäste sie einladen wird: »Nun ja ...
es kommen Lukas, Birgit, Anna, Cornelia, Dennis und Max. Lukas findet mich nett, Cornelia
mag Lukas, aber auch Anna ist in Lukas verknallt. Max liebt nur sich selbst und ahnt nicht,
dass Birgit ein Auge auf ihn geworfen hat. Ich stehe auf Dennis. Tja, Birgit und ich sind wirk-
lich dicke Freundinnen ... Sie hat mir auch erzählt, dass Dennis letzte Nacht von mir
geträumt hat. Wird bestimmt ’ne tolle Party morgen. Ich glaube, es wird einiges passieren ...«
Entwickeln Sie ein Soziogramm von Jenny und ihren Gästen und stellen Sie es als gerichte-
ten Graphen dar. Person 1Person 2 bedeutet: Person 1 mag Person 2.
27.5 Lösungen
Lösung 1
# warteschlange.py
from queue_ import Queue #1
menuetext = """(N)euerKunde
(A)bfertigen des nächsten Kunden
(E)nde
"""
print("Warten beim TÜV")
print()
warteschlange = Queue_() #2
wahl="x"
while not ((wahl in "eE") and warteschlange.empty()):
print(menuetext)
wahl = input('Auswahl: ')
if wahl in "nN":
kennzeichen = input("Kennzeichen: ")
warteschlange.enqueue(kennzeichen) #3
elif wahl in "aA":
if not warteschlange.empty():
print("Der Nächste ist: ",
warteschlange.dequeue()) #4
e l se:
print("Warteschlange ist leer")
elif (wahl in "eE") and not warteschlange.empty():
print("Es warten noch Kunden!") #5
print("Ich wünsche einen schönen Feierabend! ")
Kapitel 27
Modellieren mit Kellern, Schlangen und Graphen
764
Erläuterung:
#1: Die Datei queue_.py befindet sich im gleichen Verzeichnis wie das Skript und enthält
die Definition der Klasse
Queue wie in Abschnitt 27.2. Das Modul hat den Namen queue_
(mit Unterstrich am Ende), weil es das Standardmodul queue schon gibt.
#2: Instanziierung der Warteschlange.
#3: Der String mit dem Kennzeichen wird an die Warteschlange angehängt.
#4: Sofern die Warteschlange nicht leer ist, wird das vorderste Element entnommen und auf
dem Bildschirm ausgegeben.
#5: Das Programm darf erst beendet werden, wenn alle Kunden bedient worden sind.
Lösung 2
a) Rekursive Funktion
Erläuterung:
#1: Abbruch der Rekursion, wenn der Stapel leer ist
#2: Rekursiver Aufruf der Funktion mit kleinerem Stack (oberstes Element wurde entfernt)
#3: Originalzustand des Stacks wird wieder hergestellt.
b) Nicht rekursive Funktion
def laengeRek(stapel):
if s t ape l .emp t y() : #1
return 0
else:
h i lf = s t ape l .po p ( )
laenge = 1 + laengeRek(stapel) #2
s t apel . pus h ( h ilf ) #3
return laenge
def laenge(stapel):
i = 0 #1
hilf = Stack()
while not stapel.empty(): #2
i + = 1
hilf.push(stapel.pop())
while not hilf.empty(): #3
stapel.push(hilf.pop())
return i
765
27.5
Lösungen
Erläuterung:
#1: Zähler wird initialisiert.
#2: Solange der Stapel nicht leer ist, wird der Zähler um eins erhöht und das mit pop() ent-
fernte Element auf dem Hilfsstapel zwischengelagert.
#3: Originalzustand des Stacks wird wieder hergestellt, indem die geretteten Elemente vom
Hilfsstapel zurücktransportiert werden.
Lösung 3
Lösung 4
Abb. 27.11: Soziogramm von Jennys Partygästen
def umdrehen(schlange):
stapel = Stack()
while not schlange.empty():
stapel.push(schlange.dequeue())
while not stapel.empty():
schlange.enqueue(stapel.pop())
Jenny
Max
Dennis
Lukas
Birgit
Anna
Cornelia

Get Python 3 - Lernen und professionell anwenden now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.