Python Tutorial deutsch, #35 Solitär lösen

preview_player
Показать описание
Hier lösen wir das Brettspiel Solitär mit einer einfachen rekursiven Tiefensuche (Depth First Search). Das Programm findet die Lösung mit genau einem Stein in der Mitte in ca 2-3 Sekunden.

Рекомендации по теме
Комментарии
Автор

Hallo Gravitar,

ich habe mich nun extra angemeldet, um die endlich für die wirklichen hervorragenden ABCIP-Videos zu danken. Es ist jedesmal eine Überraschung und zudem sehr lehrreich, wie du die Problemstellungen angehst und zum Teil recht unorthodoxe Ansätze findest. Natürlich gibt es Themen, die einen mehr oder weniger interessieren - informativ ist es auf jeden Fall.

Ich wundere mich manchmal, wie wenige Aufrufe die Videos haben, denn diese Dichte von Python-Know-How-To und by-the-way Fresh-Ups habe ich noch in keinem der zahlreichen Python-Bücher gefunden (das neue Algorithmen-Buch von Rheinwerk ist da noch hervorzuheben).

Zu deiner Frage, die du am Ende stellst, muss ich aber sagen, dass mir die herkömmlich Art der Präsentation eher besser gefallen hat. Die Gründe:

1. Die Eingabe des Codes hat mich bisher nicht gestört. Sie entspricht ja der Art, wie der Programmierer das selbst machen würde, wodurch fast der Eindruck entsteht, dass man das gerade bei der Entwicklung des Algorithmus dabei ist.

2. Bei der on-line Programmierung passen die Anmekungen und Kommentare 1:1 auf die Codestelle. Die Tatsache, dass manchmal Tippfehler eingegeben werden, kennt man ja von sich und das erhöht meiner Ansicht nach gerade die Aufmerksamkeit.

3. Die heutige Präsentation ist im Gegenteil nicht so dicht an der Programmierung dran. Das ist z.B. gerade bei der Aufsplittung der Liste in Zeilen und Spalten ganz zu Anfang zu bemerken. Zwar hatte man das schon öfter bei früheren Projekten und dir fällt das am Ende ja auch auf, aber man sieht, wie leicht etwas übersehen werden kann. Ich finde, gerade die direktere Art der zeitgleichen Programmierung machte auch den besonderen Reiz der Videos aus.

4. Die Länge der Videos ist manchal schon groß, aber zur Not kann ja vorgespult werden. Ich schaue mir die auch schon zwei, dreimal an. Und meistens zeichen sich deine PRogramme ja gerade durch einen kurzen, effektiven Code aus. Es wäre zu prüfen, wie lange das Solitair-Vieo nach herkömmlicher Art geworden wäre.
 
Ich hoffe deshalb, du bleibst eher bei der hergebrachten Art. Auf jeden Fall hoffe ich auf viele weitere Videos.

fruchthund
Автор

Danke für die hilfreichen Rückmeldungen. Das war ja eindeutig. Damit werde ich in Zukunft weiter "vom leeren Bildschirm" starten, auch wenn dies ein wenig länger dauert. Ich selbst hatte auch das Gefühlt, das die Erklärung beim fertigen Code etwas holpriger ist, da man selbst auch nicht mehr alle Gedankengänge parat hat, wenn man diesen erklärt. Das funktioniert beim komplett neu erstellen deutlich besser. Das nächste Video ist auch wieder in der bewährten Form gedreht.

Gravitar
Автор

Also ich bin da der gleichen Meinung wie "fruchthund" ... ich finde es immer wieder interessant auch den Gedankengang mitzubekommen wieso etwas gerade gemacht wird. Also meiner Meinung nach direkt bei schreiben dabei sein... trotzdem wieder ein tolles Video zum Thema Python .... An Hand deiner Videos habe ich auch schon eigne Programme geschrieben ... mach bitte weiter so

DANKE

markusr.
Автор

Hi Gravitar,
Deine ausgesuchten Themen sind immer total unterhaltsam. In der Solitär-Lösung ganz interessant, dass Du die Zugliste erst nach Durchlauf der Rekursion erweiterst und Du somit die Zugfolge rückwärts in der Liste notierst.. eigentlich müssten die Züge vorne angestellt oder die gesamte Liste am Ende noch mal reversed werden.. aber irgendwie klappt das auch so. Ist vermutlich Solitär rückwärts (also nur 1 Pin in der Mitte und jedes leere übersprungene Feld wird gefüllt) mit 0 und 1 vertauscht... mmhhhh...

SebastianPoner
Автор

Gute Lösung Definitiv Besser als meine eigene, Tipp das was du erzählst über den jeweiligen Befehl als Kommentar dazuschreiben

lanisterkanister
Автор

Muss mich fruchthund
anschließen, aus den selben Gründen würde ich auch die alt hergebrachte Art bevorzugen

Tom-hglw
Автор

Hi, 21:37
kannst du bitte noch einmal erklären wie 'if dfs(anz_steine - 1)" weiß das sich die Anzahl der Steine um eins verringert hat?
Ich verstehe schon, was du bei: "feld_dict[p1], feld_dict[p2], feld_dict[p3] = 0, 0, 1"
gemacht hast, aber irgendwie verstehe ich den Zusammenhang mit 'anz_steine' nicht denn dort ist ja am Anfang der Wert 32 gespeichert.
Woher weiß aber 'anz_steine' durch diese Zuweisung = 0, 0, 1 dass dort nun ein Stein fehlt?
Müsste man dafür nicht anz_steine zuerst einen neuen Wert zuweisen z. B. anz_steine = 31 oder mit len() den Wert nochmal neu zählen?

pyuc