Seite 1 von 1

Anfänger braucht Hilfe:Schleifenindex zurücksetzen

Verfasst: Mittwoch 10. September 2008, 16:43
von hbral
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.

Re: Anfänger braucht Hilfe:Schleifenindex zurücksetzen

Verfasst: Mittwoch 10. September 2008, 17:10
von helduel
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

Verfasst: Mittwoch 10. September 2008, 17:12
von 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.

Verfasst: Mittwoch 10. September 2008, 17:27
von hbral
@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.

Verfasst: Mittwoch 10. September 2008, 17:37
von numerix
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.

Verfasst: Mittwoch 10. September 2008, 18:15
von hbral
ja stimmt danke, darauf bin ich garnicht gekommen

Verfasst: Mittwoch 10. September 2008, 18:45
von snafu