Anfänger braucht Hilfe:Schleifenindex zurücksetzen

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
hbral
User
Beiträge: 5
Registriert: Mittwoch 10. September 2008, 16:36

Hallo.

Bin ein Python Neuling und habe folgendes Problem.

eine einfache for-Schleife:

Code: Alles auswählen

for i in range(0, n):
  print i,
  i = 1 # (geht leider nicht)
jetzt möchte ich zB. den index i wieder auf den wert 1 zurücksetzen wie das beispielsweise auch in C möglich wäre wie:

Code: Alles auswählen

int i;
for(i=0; i<n; i++)
{
  printf(i);
  i = 1;
}
Dummes Beispiel aber soll halt nur der veranschaulichung dienen

Edit (BlackJack): Code in Tags gesetzt.
Benutzeravatar
helduel
User
Beiträge: 300
Registriert: Montag 23. Juli 2007, 14:05
Wohnort: Laupheim

Moin,

so direkt geht das nicht, aber du kannst sowas ähnliches mit einem Generator selbst basteln. So in etwa:

Code: Alles auswählen

from itertools import count

def my_iter(n):
    counter = count(0)
    while True:
        i = counter.next()
        if i >= n:
            raise StopIteration       
        j = (yield i)
        if j is not None:
            counter = count(j)

>>> i = my_iter(10)
>>> i.next()
0
>>> i.next()
1
>>> i.next()
2
>>> i.next()
3
>>> i.send(1)
1
>>> i.next()
2
Wozu brauchst denn das, wenn man fragen darf?

Gruß,
Manuel
BlackJack

@hbral: Das geht mit ``for``-Schleifen in Python nicht. Bei jedem Durchlauf der Schleife wird der Name an das nächste Objekt aus dem Iterator gebunden, den der Schleifencode von dem Objekt nach ``in`` holt und an dieses Objekt kommt man nicht heran.
hbral
User
Beiträge: 5
Registriert: Mittwoch 10. September 2008, 16:36

@Manuel ok danke für deinen Code aber ich dachte es geht ganz einfach in einer Zeile ^^

ich wollte einen Backtracking Algorithmus implementieren für das nDamenproblem so als Übung um mich mit der Sprache anzufreunden.

wenn ich jetzt meine Damen auf dem Brett plaziere dann komme ich ja irgendwann in eine Sackgasse. Dann muss ich ja den Versuch rückgängig machen und ihn anders Platzieren. Dazu muss ich ja auch die Schleife wieder an diesen Punkt bringen.

Vielleicht gibts es ja da auch irgendwas ganz elegantes.
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

hbral hat geschrieben:Vielleicht gibts es ja da auch irgendwas ganz elegantes.
Nimm doch einfach eine while-Schleife statt einer for-Schleife.
Inwiefern das eine Form der Eleganz ist, mag jeder selbst beurteilen. Auf jeden Fall ist es die naheliegendste Lösung.
hbral
User
Beiträge: 5
Registriert: Mittwoch 10. September 2008, 16:36

ja stimmt danke, darauf bin ich garnicht gekommen
Benutzeravatar
snafu
User
Beiträge: 6731
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Antworten