Seite 1 von 1
else bei for und while ???
Verfasst: Mittwoch 10. März 2004, 23:24
von Dookie
Hallo Leute,
jetzt hab ich auch mal eine Frage. Vor kurzem hab ich entdeckt, daß auch for und while ein else kennen, nur erschließt sich mit die Sinnhaftigkeit davon nicht.
Code: Alles auswählen
for i in xrange(10):
print i,
else:
print "Ende der Sequenz"
führt zur gleichen Ausgabe wie
Code: Alles auswählen
for i in xrange(10):
print i,
print "Ende der Sequenz"
genauso wie bei
Code: Alles auswählen
for i in xrange(0):
print i,
else:
print "Ende der Sequenz"
das gleiche rauskommt
oder auch
das gleiche ergebnis ausgibt wie
Code: Alles auswählen
i = 0
while i < 10:
print i,
else:
print "Ende der Sequenz"
Die einzige Anwendung habe ich in der interaktiven Pythonconsole gefunden, wo der else zweig auch erst ausgeführt wird, wenn ich den for bzw while else Block verlasse.
Gruß
Dookie
Verfasst: Donnerstag 11. März 2004, 14:47
von Milan
Hi Dookie. das else wird, wie du bestimmt schon herausgefunden hast, nur ausgeführt, wenn die Schleifen vollständig durchlaufen wurden. Nach dem Aufruf eines breaks ist dies nicht gegeben und das kann man wunderbar ausnutzen. So musst du zum Beispiel keine Variablen belegen, um abzufragen, ob die Schleife vorzeitig abgebrochen wurde. Beispiel: erinner dich an die Primzahlberechnung und meinen ersten Lösungsvorschlag:
Milan hat geschrieben:Hi. Tut es nicht auch ein einfacher Test auf Teilbarkeit? Ist vielleicht nicht so effektiv, aber am Anfang leichter verständlich.
Code: Alles auswählen
erglist=[]
MAXPRIM = 10000
for zahl in xrange(2,MAXPRIM+1,1):
for prim in erglist:
if zahl%prim==0: break
else:
print zahl
erglist.append(zahl)
Milan
Dasgleiche ist auch für while Schleifen machbar. Ich finde das else also durchaus sehr nützlich. Alles verstanden?
Milan
Verfasst: Donnerstag 11. März 2004, 15:40
von Dookie
Hi Milan,
danke, jo das ist ein Argument. Bei for-schleifen nutze ich praktisch nie ein break, entspricht nicht meinem Programmierstiel. Bei While könnte ich mir ab und zu einen Fall vorstellen wo es was bringt.
Irgendwie schauts bei Deinem Beispiel so aus als währe die Einrückung verrutscht
Bisher bin ich auch ganz gut ohne ausgekommen aber gut zu wissen das sowas auch geht.
Gruß
Dookie
Verfasst: Donnerstag 11. März 2004, 16:07
von Sneaker
He cool gut zu wissen
sowas sollte man sammeln
Verfasst: Donnerstag 11. März 2004, 18:31
von Milan
Dookie hat geschrieben:Irgendwie schauts bei Deinem Beispiel so aus als währe die Einrückung verrutscht
Hi. Das else bezieht sich ja auch auf die innere Schleife
Nochwas zur while Schleife: in der nächsten version von Python wird da noch ein optionales "do" dazukommen, dass vor der Schleife ausgeführt wird. Da kann dann Initialcode rein. Finde Ich auch sehr praktisch
Nachzulesen im
PEP 315
mfg, Milan
Verfasst: Donnerstag 11. März 2004, 18:49
von Sneaker
und wozu ist dieser anfang da ich kann doch wohl variablen auch ohne den do teil initialisieren oder was ist mit setup code gemeint ?
Verfasst: Donnerstag 11. März 2004, 19:16
von Dookie
so wie ich das rauslese, enspricht das einer repeat-until not ... schleife, mit dem Unterschied, dass vor und nach dem Prüfen der Bedingung code ausgeführt wird.
Heute schreibst Du z.B.:
bei Python 2.4 gehts dann
Gruß
Dookie
Verfasst: Donnerstag 11. März 2004, 20:01
von Sneaker
Ahso verstehen code der sowieso nach jedem schleifen durchlaufa usgeführt werden soll, den kann man dann da rein schreiben ?
Verfasst: Donnerstag 11. März 2004, 20:50
von Milan
Hi. So würde ich das nicht sagen... der Block ist zum ausführen des codes gedacht, der Einfluss auf die Bedingung der Schleife hat und Zugleich vor dem ausführen der while-Schleife einmal durchlaufen werden muss. Insofern hat Dookie schon ganz recht. Das war aber auch überfällig, denn so kann man auch eine "fußgesteuerte" Schleife bauen und spaart sich auch aufwändigere Konstrukte, die das mit größerer Laufzeit erreichen.
Milan
Verfasst: Donnerstag 11. März 2004, 21:20
von Sneaker
also so ne art do while schleife wie in C++ ? die mindestens einmal durchlaufen wird ?
Verfasst: Donnerstag 11. März 2004, 21:45
von Dookie
jo die kannst damit machen, das würd dann so ausschaun
Dookie