For-Schleife Spezialfall

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
FabSel
User
Beiträge: 4
Registriert: Freitag 26. Februar 2016, 16:36

Hallo zusammen,

ich hoffe mir kann jemand weiterhelfen.

Folgendes vereinfachtes Problem:

Ich habe eine einfache For-Schleife in welcher ich unter bestimmten Bedingungen einen Schleifendurchgang wiederholen möchte.

Also vereinfachtes Beispiel:

Code: Alles auswählen

for i in range(1,10)
   if i = 3: 
       i = i-1 # Meine Idee - Theoretisch Zugriff auf den Index in der Schleife, aber praktisch funktioniert es nicht (d.h. die Schleife wird zu dem Zeitpunkt nicht nochmal durchlaufen)
Also gibt es Möglichkeiten unter bestimmten Bedingungen auf den Laufindex zuzugreifen? :K

Viele Grüße und Danke!!!!
Zuletzt geändert von Anonymous am Donnerstag 3. März 2016, 22:53, insgesamt 1-mal geändert.
Grund: Quelltext in Code-Tags gesetzt.
Sirius3
User
Beiträge: 17738
Registriert: Sonntag 21. Oktober 2012, 17:20

@FabSel: die eigentliche Frage ist ja, was willst Du erreichen? Also nicht, wie Du denkst, wie das Problem zu lösen ist, sondern das Problem an sich.
FabSel
User
Beiträge: 4
Registriert: Freitag 26. Februar 2016, 16:36

Hey,
ich möchte die eindimensionale Diffusions-Konvektions-Gleichung mit vorgegeben Rand- und Anfangsbedingungen mit der Runge-Kutta-Fehlberg Methode (45 Methode) lösen bzw. simulieren. Dabei ist nur der Fall, dass ich eine zeitliche Schrittweitensteuerung (grade in der for-Schleife) vornehmen muss. Habe es jetzt mit einer einfachen while-Schleife lösen können. Würde mich aber trotzdem mal interessieren, ob auch eine for-Schleife ginge.

Grüße :?:
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

Code: Alles auswählen

for i in range(1,10):
weist i nacheinander die Werte 1, 2, 3, 4, 5, 6, 7, 8. 9 zu,
egal was man in der Schleife mit i gemacht hat. while ist
also die (vermutlich) einzige richtige Lösung. Auch in
stackoverflow.com findet man keine anderen Aussagen.

eckhard
eckhard
User
Beiträge: 33
Registriert: Montag 14. Dezember 2015, 10:06
Wohnort: Karlsruhe

ich muss meine letzte Antwort etwas ergänzen.
Mit dem folgenden Code (der vielleicht nicht pythonisch ist) kann man in einer for-Schleife
der Laufvariablen neue Werte zuweisen:

Code: Alles auswählen

indices = [1, 2, 3, 4]
for i in indices:
    print(i)
    if i == 2:
        indices[2:3] = [77, 78, 79]

Ausgabe:
1
2
77
78
79
4
eckhard
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Es ist keine gute Idee den Iterator so zu veraendern.
Ich bin nicht mehr allzu fit was Numerik angeht und die verwendeten Algorithmen sind auch meistens sehr unschick, aber prinzipiell will man eher so etwas:

Code: Alles auswählen

for i in range(42):
    x = do_foo(i)
    if valuate(x) < 1:
        x = do_foo(i - 1)
Sprich, man verpackt den relevanten Teil in Funktionen und fuettert sie mit den anderen Daten, statt die 30 Zeilen innerhalb der Schleife nochmal mit anderen Daten wiederholen zu wollen.
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

FabSel hat geschrieben: Also vereinfachtes Beispiel:

Code: Alles auswählen

for i in range(1,10)
   if i = 3: 
       i = i-1 # Meine Idee - Theoretisch Zugriff auf den Index in der Schleife, aber praktisch funktioniert es nicht (d.h. die Schleife wird zu dem Zeitpunkt nicht nochmal durchlaufen)
Das Beispiel is etwas unglücklich gewählt, denn das ergibt eine Endlosschleife:

Code: Alles auswählen

i=0
while(i<10):
    print(i)
    if i==3:
        i=i-1

    i+=1
Benutzeravatar
miracle173
User
Beiträge: 127
Registriert: Samstag 6. Februar 2016, 00:28

Sirius3 hat geschrieben:@FabSel: die eigentliche Frage ist ja, was willst Du erreichen? Also nicht, wie Du denkst, wie das Problem zu lösen ist, sondern das Problem an sich.
FabSel hat geschrieben:...
ich möchte die eindimensionale Diffusions-Konvektions-Gleichung mit vorgegeben Rand- und Anfangsbedingungen mit der Runge-Kutta-Fehlberg Methode (45 Methode) lösen bzw. simulieren. Dabei ist nur der Fall, dass ich eine zeitliche Schrittweitensteuerung (grade in der for-Schleife) vornehmen muss. Habe es jetzt mit einer einfachen while-Schleife lösen können. Würde mich aber trotzdem mal interessieren, ob auch eine for-Schleife ginge.
...
@FabSel
Das ist durchaus sinnvoll den Zusammenhang darzustellen in dem dein Poblem auftritt. Allerdings die von @Sirius3 angesprochene Darstellung des Problems, das du lösen willst, ist das nicht. Das ist die Beschreibung der erwünschten Funktion deines Programms. Ein Problem beschreibst du folgendermaßen:

Dabei ist nur der Fall, dass ich eine zeitliche Schrittweitensteuerung (grade in der for-Schleife) vornehmen muss.

Das ist ein absolut unverständlicher Satz. Aber da das dein Problem ist solltest du das in einer verständlichen Sprache beschreiben. Da es sich um ein programmiertechnisches Problem handelt, sollte zum Verstehen der Beschreibung aber kein Wissen über das numerische Lösen von Differentialgleichungen notwendig sein.
Antworten