Python Josephus |
13.06.2016, 16:48 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Python Josephus Hallo. Ich habe so meine Probleme mit dem Josephusproblem(ich hoffe der Sachverhalt ist bekannt). Folgenden Code konnte ich durch testen und Suchen zusammenfügen
Funktioniert ,soweit ich weiß richtig.Meine Frage klingt vielleicht etwas sonderbar,aber ich verstehe das erste Programm irgendwie nicht. Ich meine ich verstehe das mit list range und n+1 usw. ,aber bei del und yield bin ich mir nicht so sicher wie das funktioniert und besonders mit der Formel in der vierten Zeile habe ich so meine Probleme. Könnte jemand vielleicht erläutern das man darauf kommt? Vielen Dank nochmal lg |
||||||||||||
|
|||||||||||||
13.06.2016, 16:56 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | i ist die aktuelle Position. Die wird um k-1 erhöht. Die -1 kommt, weil aus der Liste etwas gelöscht werden soll, die Indizes verschieben sich also alle. Um im Kreis zu bleiben, wird dann noch modulo dessen Länge gerechnet. yield gibt dann die aktuelle Person an den Iterator zurück. del entfernt die Person aus der Liste. Ich finde es übrigens sehr verwirrend, dass du dich Dr. Java nennst und Fragen zu Python stellst. |
||||||||||||
13.06.2016, 17:44 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Erneut danke euler. Ich heiße nur so aus mangelnder Kreativität ,mir ist damals auf die schnelle nichts eingefallen und ich wollte keinen zu spezifischen Namen,deshalb Dr. (wie zum Beispiel DrRacket) und eben Java sodass ich jetzt diesen Namen trage. Aber Fragen zu Java werden bestimmt auch noch irgendwann kommen. Zum Thema
Ist das so eine Regel in Python oder ist das eher was mathematisches?
Ich fürchte ich kann dir nicht ganz folgen.Was meinst du genau mit im Kreis bleiben? Man dividiert doch die Position im Kreis durch die Länge des Objekts(mit Rest) um zu ermitteln welches Element des Objekts entfernt wird,aber warum so, gibt es da eine Formel oder ist das ein logischer Schluss, ich komme einfach nicht dahinter.
Und dann wird mit dem neuen objects und dem neuen i der nächste Wert bestimmt ,bis nichts mehr da ist,oder? lg |
||||||||||||
13.06.2016, 18:02 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Die -1 ist mathematisch: Wenn du mitten aus einer Liste etwas löschst, verschieben sich die folgenden Indizes.
Zum Kreis:
Nach Index 5 (Wert 6) käme ohne das Modulo Index 6. Mit Modulo wird sichergestellt, dass du im Bereich 0-5 bleibst. Auch das ist eine mathematische Überlegung.
Ja. |
||||||||||||
Anzeige | |||||||||||||
|
|||||||||||||
14.06.2016, 09:13 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Okay danke,ich verstehe das ganze schon mehr.
Also ist das nur vorbeugend weil sonst bei der Löschung von objects was verloren gehen würde?Aber das würde doch eigentlich nicht das k sondern das Intervall von objects betreffen?
Ach so, dann sorgt das Modulo dafür das sich das Intervall nicht wiederholt,was es sonst tun würde da es ein Kreis ist? lg |
||||||||||||
14.06.2016, 11:32 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Das -1 ist, um keine zu große Schrittweite zu haben. Das Modulo sorgt gerade dafür, dass es wieder von vorne losgeht. |
||||||||||||
14.06.2016, 17:45 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java |
Okay, und dafür sorgt man also indem man bei k eins abzieht.Aber warum betrifft das k ,sollte und müsste man das nicht bei objects machen?
Das Modulo ist also da um zu sorgen das das Intervall und der Index sich wiederholen. Weil ansonsten die Rechnung über das Intervall hinaus gehen würde? lg |
||||||||||||
15.06.2016, 07:30 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Aus k ergibt sich ja der Index dessen, was als nächstes gelöscht wird. Die -1 verringert diesen Index.
Durch das Modulo geht es wieder von vorne los. Ohne würden die Zahlen immer größer werden, sodass der Index irgendwann außerhalb des Kreises liegt und es keine zweite Runde gibt. |
||||||||||||
15.06.2016, 18:48 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java |
Ah,das klingt natürlich einleuchtend.
Das ganze lässt also den Index iterieren,und du meintest ja das ganze würde auf mathematischen Überlegungen beruhen, was wären diese denn ganz konkret? lg |
||||||||||||
15.06.2016, 18:50 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Lass' das modulo doch einfach weg und gib i aus. Dann siehst du, was ich meine (das yield und del solltest du dann auch rausnehmen). |
||||||||||||
15.06.2016, 19:37 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Einfach beim Programm das Modulo ,die yield und del Zeile streichen? Also so ?
Dann gibt er mir nur eine Zahl aus,2. Die seq Funktion funktioniert dann aber überhaupt nicht mehr .Falls du das ganze auch ohne return meintest, das funktioniert bei mir nicht,die Shell friert dann nur ein. Und mit yield und del gibt seq_josephus mir nur ne Fehlermeldung aus. lg |
||||||||||||
15.06.2016, 20:08 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Du sollst ja auch print schreiben und nicht return. Du wirst eine Fülle von Zahlen bekommen. Du sollst einfach nur sehen, dass sie außerhalb des Arraybereichs liegen. |
||||||||||||
16.06.2016, 10:15 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Oh, ich sehs. Das passiert also wenn man das ganze ohne modulo rechnet. Entschuldige,wenn ich mich etwas blöd anstelle, aber was ist die mathematische Logik dahinter, ich meine das ist ja jetzt nur wie sich das ganze in Python verhält und auswirkt. lg |
||||||||||||
16.06.2016, 10:51 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Ich kann nicht glauben, dass ich das gerade tue: Code zum Bilder erzeugen:
Bild (animiert, musst du anklicken): Oben siehst du den Kreis, unten die Liste, wie sie im Speicher steht. Wie du siehst, kommt man aus der Liste heraus und muss sich zurücksetzen. |
||||||||||||
16.06.2016, 13:02 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Vielen lieben Dank für deine Bemühungen. Ist das ein Python Code? Ich kann den Ablauf des Programms inzwischen vollkommen nachvollziehen .Und ich denke ich verstehe jetzt auch das mit dem Modulo,im nachhinein betrachtet hatte ich wohl ein Brett vorm Kopf . Vielen Dank nochmal für deine Geduld und Mühen. lg |
||||||||||||
16.06.2016, 20:18 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Freut mich, dass du es verstanden hast. Und der Code ist C#, damit bin ich einfach schneller. |
||||||||||||
17.06.2016, 22:42 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java |
Ja, hat ja lange genug gedauert, danke nochmal. C also, die Sprachen sehen für mich noch alle recht ähnlich aus, ich denke mit der Zeit,werde ich dann auch die feinen Unterschiede feststellen können. lg |
||||||||||||
18.06.2016, 08:05 | Auf diesen Beitrag antworten » | ||||||||||||
eulerscheZahl | Nein, nicht C. C# (sprich: C Sharp). Das ist Microsofts Reaktion auf einen Rechtsstreit mit Sun Microsystems (Java). Zumindest Consolenanwendungen laufen aber auch unter Linux. Von der Syntax her ähnlich zu Java. Python sieht doch ziemlich verschieden aus. |
||||||||||||
19.06.2016, 09:36 | Auf diesen Beitrag antworten » | ||||||||||||
Dr.Java | Ach das soll ein anderes Programm sein, wieder was gelernt. Ok, anders als Python ,wohl schon wegen den geschweiften Klammern und dem using statt import(?),aber ansonsten gibt es ,zumindest beim ersten Blick,einige Parallelen,beim näheren hinschauen bekommt man schon den Verdacht das es eine andere Sprache ist . lg |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
|
Die Neuesten » |
|