Tower of Hanoi

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
Sachsen31
User
Beiträge: 1
Registriert: Mittwoch 4. Juli 2018, 23:05

Hallöchen Leute,

ich habe ein Probelm und hoffe das mir im Forum jemand auf die Sprünge helfen kann.

Diesen Skript habe ich zur Verfügung gestellt bekommen. Es handelt sich hierbei um eine Simulation von den Türmen von Hanoi.

# Startposition
A = [4,3, 2, 1]
B = []
C = []

print str(A) + str(B) + str(C)
print "##############"
print "\n"

def bewegen(n, quelle, ziel, hilf):
if n > 0:
bewegen(n - 1, quelle, hilf, ziel)
ziel.append(quelle.pop())
print str(A) + str(B) + str(C)
print "##############"
print "\n"
bewegen(n - 1, hilf, ziel, quelle)
bewegen(4, A, C, B)

Simulationen sind aber irgendwie "langweilig", ich möchte gerne das der Benutzer selber die Züge steuert.
Wie kann man da vorgehen?

Mein Ansatz war:
Der Benutzer gibt die zu bewegender Scheibe und den Zielstab ein.

Es handelt sich prinzipiell ja nur um eine Schleife die so lange wiederholt wird, bis alle Scheiben auf Stab C gebracht wurden. (Abbruchbedingung für Schleife)
Nun versuche ich die Eingabe zu überprüfen, also zunächst herauszufinden in welcher Liste sich die Scheibe befindet und ob sie bewegt werden kann.
Anschließend muss ich überprüfen ob die Scheibe auf den Zielstab "gelegt" werden kann und natürlich müssen noch die Werte in den Listen geändert werden.

Vielen Dank!
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Als erstes sollte man die drei Türme in einer Liste speichern, damit man nicht das Problem bekommt Benutzereingaben zu Variablennamen konvertieren zu müssen. Es liesse sich dann auch leicht auf mehr als drei Türme erweitern, falls einem drei auch manuell zu langweilig werden sollten. :-)

Dann brauchst Du eine Schleife die solange läuft bis der Endzustand erreicht ist, wie Du ja schon richtig erkannt hast. Endzustand kann man auch formulieren als „alle bis auf den letzten Turm sind leer.“ Hat wieder den Vorteil das diese Beschreibung unabhängig von der Anzahl der Türme ist.

In der Schleife muss der Benutzer Ausgangs- und Zielturm wählen. Da musst Du dann überlegen welche Bedingungen da jeweils geprüft werden müssen, damit ein Zug möglich/legal ist.

Und das war's eigentlich auch schon.

Ich würde das ja objektorientiert lösen oder zumindest mit vielen Funktionen, denn dann kann man den Tests und Operationen schöne Namen geben und braucht nicht kommentieren was die ganzen kryptischen Listenoperationen bedeuten sollen.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten