Ich habe festgestellt, dass der folgende Code in Python legal ist. Meine Frage ist, warum? Gibt es einen bestimmten Grund?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Ich habe festgestellt, dass der folgende Code in Python legal ist. Meine Frage ist, warum? Gibt es einen bestimmten Grund?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
Die else
Klausel wird nur ausgeführt, wenn Ihr while
Bedingung falsch wird. Wenn Sie break
aus der Schleife heraus, oder wenn eine Ausnahme ausgelöst wird, wird sie nicht ausgeführt.
Eine Möglichkeit, sich das vorzustellen, ist eine if/else-Konstruktion in Bezug auf die Bedingung:
if condition:
handle_true()
else:
handle_false()
ist analog zu dem Schleifenkonstrukt:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
Ein Beispiel könnte in etwa so lauten:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don't pass go, don't collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
Die else
Klausel wird ausgeführt, wenn Sie einen Block normal verlassen, indem Sie auf die Schleifenbedingung treffen oder am Ende eines Try-Blocks abfallen. Sie ist pas ausgeführt, wenn Sie break
o return
aus einem Block heraus, oder eine Ausnahme auslösen. Dies gilt nicht nur für while- und for-Schleifen, sondern auch für try-Blöcke.
Man findet sie in der Regel an Stellen, an denen man normalerweise eine Schleife vorzeitig verlassen würde, und das Auslaufen aus dem Ende der Schleife ist ein unerwartetes/ungewöhnliches Ereignis. Zum Beispiel, wenn Sie in einer Schleife eine Liste nach einem Wert durchsuchen:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
In Antwort auf Is there a specific reason?
Hier ist eine interessante Anwendung: Ausbrechen aus mehreren Ebenen der Schleifenbildung.
So funktioniert es: Die äußere Schleife hat eine Pause am Ende, wird also nur einmal ausgeführt. Wenn die innere Schleife jedoch abgeschlossen ist (keinen Divisor findet), gelangt sie zur else-Anweisung und die äußere Pause wird nie erreicht. Auf diese Weise führt ein Abbruch in der inneren Schleife zum Abbruch beider Schleifen und nicht nur einer Schleife.
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print 'trying %s %% %s' % (k, m)
if k % m == 0:
print 'found a divisor: %d %% %d; breaking out of loop' % (k, m)
break
else:
continue
print 'breaking another level of loop'
break
else:
print 'no divisor could be found!'
Für beide while
y for
Schleifen, die else
Anweisung wird am Ende ausgeführt, es sei denn break
verwendet wurde.
In den meisten Fällen gibt es bessere Möglichkeiten, dies zu tun (Einbindung in eine Funktion oder Auslösen einer Ausnahme), aber dies funktioniert!
Die else-Klausel wird ausgeführt, wenn die while-Bedingung zu false ausgewertet wird.
Von der Dokumentation :
Die while-Anweisung wird zur wiederholten Ausführung verwendet, solange ein Ausdruck wahr ist:
while_stmt ::= "while" expression ":" suite ["else" ":" suite]
Dies testet den Ausdruck wiederholt und führt, wenn er wahr ist, die erste Suite aus; wenn der Ausdruck falsch ist (was das erste Mal sein kann, dass er getestet wird), wird die Suite der
else
Klausel, falls vorhanden, ausgeführt und die Schleife wird beendet.A
break
Anweisung, die in der ersten Suite ausgeführt wird, beendet die Schleife, ohne dieelse
die Suite der Klausel. Acontinue
Anweisung, die in der ersten Suite ausgeführt wird, überspringt den Rest der Suite und kehrt zum Testen des Ausdrucks zurück.
Die else-Klausel wird nur ausgeführt, wenn die while-Bedingung falsch wird.
Hier sind einige Beispiele:
Beispiel 1: Zu Beginn ist die Bedingung falsch, also else-Klausel ausgeführt wird.
i = 99999999
while i < 5:
print(i)
i += 1
else:
print('this')
OUTPUT:
this
Beispiel 2: Die while-Bedingung i < 5
nie falsch wurde, weil i == 3
unterbricht die Schleife, so dass else-Klausel wurde nicht ausgeführt.
i = 0
while i < 5:
print(i)
if i == 3:
break
i += 1
else:
print('this')
OUTPUT:
0
1
2
3
Beispiel 3: Die while-Bedingung i < 5
falsch wurde, als i
war 5
Así que else-Klausel ausgeführt wurde.
i = 0
while i < 5:
print(i)
i += 1
else:
print('this')
OUTPUT:
0
1
2
3
4
this
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.