Seite 1 von 1
For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 02:42
von Jens_J.
Hallo
Ich hoffe es sei gestattet dieses Forum mit einer, wie ich vermute, einfachen Frage zu behelligen.
Ich habe eine for-loop und diese soll wenn eine Bedingung nicht erfüllt wurde (einige Zufallsparameter) einen Schritt noch einmal ausführen.
Nun und genau hier möchte ich gerne stehen haben, dass diese itterierung wiederholt wird und nochmal durchgelaufen wird, ohne dass ein Schritt weiter gegangen wird.
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 03:42
von DasIch
Dafür gibt es nichts fertiges, kann man sich aber selbst bauen.
Code: Alles auswählen
class RepeatableIterator(object):
def __init__(self, iterable):
self.iterator = iter(iterable)
self.should_repeat_current = False
def repeat(self):
self.should_repeat_current = True
def __iter__(self):
return self
def __next__(self):
if self.should_repeat_current:
self.should_repeat_current = False
return self.current
self.current = next(self.iterator)
return self.current
iterator = RepeatableIterator(range(10))
seen_5 = False
for i in iterator:
print(i)
if i == 5 and not seen_5:
iterator.repeat()
seen_5 = True
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 08:37
von snafu
Etwa so?
Code: Alles auswählen
def iter_items(items, condition):
for item in items:
yield item
if condition(item):
yield item
def below_5(item):
return item < 5
def main():
for item in iter_items(range(10), below_5):
print(item)
Wozu soll das gut sein?
EDIT:
Übrigens kann man das natürlich auch weniger abstrakt schreiben:
Code: Alles auswählen
def main():
for item in range(10):
print(item)
if item < 5:
print(item)
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 10:30
von BlackJack
@Jens_J.: Wo ist denn da das „genau hier“? Da wo die Auslassungspunkte sind? Im ``else``-Zweig? Und welches konkrete Problem soll da gelöst werden? Auch wenn man das lösen kann, riecht es irgendwie nach einem XY-Problem.
Code: Alles auswählen
for x in xs:
while True:
# ...
# Wenn `x` erfolgreich verarbeitet, dann mit ``break`` die
# ``while``-Schleife verlassen.
# ...
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 11:21
von Jens_J.
Guten Morgen und vielen Dank für die bisherigen Antworten.
Entweder das Problem ist doch komplizierter als ich dachte, oder ich habe es falsch beschrieben. Ich versuch es nochmal:
Abstrahiert sieht mein code ungefähr so aus( alles zu posten wäre zu lang)
Code: Alles auswählen
for i in range(10):
a=random()
if a>0.5:
print("alles groß")
else:
# Eigentlich will ich nur 10 mal einen Wert der größer ist als 0.5 (als ich möchte wenn a<0.5 den Schritt für i nochmal ausführen.
Dazu muss es doch irgendeinen einfachen Befehl geben? und ich bin nur zu doof zu suchen.
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 11:32
von snafu
So in etwa?
Code: Alles auswählen
from random import random
def get_random_float(low, high):
while True:
result = random()
if low <= result <= high:
return result
def main():
random_floats = [get_random_float(0.5, 1) for _ in range(10)]
print(random_floats)
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 11:36
von BlackJack
@Jens_J.: Na die Lösung wäre eine ``while``-Schleife. Vergiss einfach das dieser Schritt selbst Teil einer Schleife ist, das spielt für das Problem doch gar keine Rolle. Du willst den Schritt solange wiederholen bis eine bestimmte Bedingung erfüllt ist. Also ``while True:`` und dann abbrechen wenn die Bedingung erfüllt ist.
Wobei das konkrete Beispielproblem hier natürlich auch ohne so eine Wiederholung formuliert werden kann in dem man gleich nur Zufallszahlen im richtigen Bereich generiert. Also bleibt immer noch die Frage was denn *eigentlich* gelöst werden soll.
Edit:
Code: Alles auswählen
# ...
for _ in range(10):
a = 1 - random() / 2
# ...
# Oder:
for a in (1 - random() / 2 for _ in range(10)):
# ...
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 12:34
von Jens_J.
Ok Danke Nochmal. Mit einer while schleife ist es ja ganz einfach. Hat gut geklappt (hoffe ich).
Meins sieht jetzt in der Art so aus.
Code: Alles auswählen
for i in range(10)
while True:
x=random()
if x > 0.5:
print("t")
break
Bedeutet "while True" , dass alles so lange ausgeführt wird bis "break" kommt oder auf welche Bedingung bezieht sich eigentlich das "True"?
Re: For Loop: Schritt wiederholen.
Verfasst: Dienstag 26. Januar 2016, 13:02
von snafu
Jens_J. hat geschrieben:Bedeutet "while True" , dass alles so lange ausgeführt wird bis "break" kommt oder auf welche Bedingung bezieht sich eigentlich das "True"?
Bei `while` wird die Schleife solange ausgeführt, wie die dahinterstehende Bedingung wahr ist. Da `True` immer wahr ist, steht ``while True`` für eine Endlosschleife. Aus einer solchen Schleife kann man nur mit `break` oder mit `return` "ausbrechen".
Anstatt zu sagen, dass das `True` sich auf etwas bezieht, würde ich es eher so formulieren, dass sich das `while` auf das `True` bezieht und das `break` eben eine der Ausbruchsmöglichkeiten darstellt.