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..."
Meine Antwort wird sich darauf konzentrieren, WANN wir while/for-else verwenden können.
Auf den ersten Blick scheint es keinen Unterschied zu geben, wenn man
while CONDITION:
EXPRESSIONS
print 'ELSE'
print 'The next statement'
et
while CONDITION:
EXPRESSIONS
else:
print 'ELSE'
print 'The next statement'
Weil die print 'ELSE'
Anweisung scheint in beiden Fällen immer ausgeführt zu werden (sowohl wenn die while
Schleife beendet oder nicht ausgeführt).
Dann, es ist nur anders, wenn die Aussage print 'ELSE'
wird nicht ausgeführt. Es ist, wenn es eine break
innerhalb des Codeblocks unter while
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print 'ELSE'
print 'The next statement'
....:
0
1
2
The next statement
Falls abweichend von:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print 'ELSE'
print 'The next statement'
....:
0
1
2
ELSE
The next statement
return
fällt nicht in diese Kategorie, da es in den beiden oben genannten Fällen die gleiche Wirkung hat.
Ausnahme auslöst, macht auch keinen Unterschied, denn wenn sie auslöst, wird der nächste Code im Exception-Handler (Ausnahmeblock) ausgeführt, der Code in else
Klausel oder direkt nach der while
Klausel wird nicht ausgeführt.
Ich weiß, diese Frage ist alt, aber...
Wie Raymond Hettinger sagte, sollte es heißen while/no_break
代わりに while/else
.
Ich finde, das ist leicht zu verstehen, wenn Sie sich diesen Ausschnitt ansehen.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
if n == 0:
print n
Anstatt die Bedingung nach der while-Schleife zu prüfen, können wir sie nun mit else
und werden Sie diesen Scheck los.
n = 5
while n > 0:
print n
n -= 1
if n == 2:
break
else: # read it as "no_break"
print n
Ich lese es immer als while/no_break
um den Code zu verstehen, und diese Syntax ergibt für mich viel mehr Sinn.
Else wird ausgeführt, wenn die while-Schleife nicht abgebrochen wurde.
Ich betrachte das gerne mit der Metapher des "Läufers".
Das "else" ist wie das Überqueren der Ziellinie, unabhängig davon, ob Sie am Anfang oder am Ende der Strecke gestartet sind. "sonst" ist nur pas ausgeführt, wenn Sie irgendwo dazwischen eine Pause einlegen.
runner_at = 0 # or 10 makes no difference, if unlucky_sector is not 0-10
unlucky_sector = 6
while runner_at < 10:
print("Runner at: ", runner_at)
if runner_at == unlucky_sector:
print("Runner fell and broke his foot. Will not reach finish.")
break
runner_at += 1
else:
print("Runner has finished the race!") # Not executed if runner broke his foot.
Die Hauptanwendungsfälle sind das Ausbrechen aus verschachtelten Schleifen oder wenn Sie einige Anweisungen nur dann ausführen wollen, wenn die Schleife nicht irgendwo abgebrochen ist (denken Sie daran, dass ein Abbruch eine ungewöhnliche Situation ist).
Im Folgenden finden Sie beispielsweise einen Mechanismus, wie Sie aus einer inneren Schleife ausbrechen können, ohne Variablen oder try/catch zu verwenden:
for i in [1,2,3]:
for j in ['a', 'unlucky', 'c']:
print(i, j)
if j == 'unlucky':
break
else:
continue # Only executed if inner loop didn't break.
break # This is only reached if inner loop 'breaked' out since continue didn't run.
print("Finished")
# 1 a
# 1 b
# Finished
Angenommen, Sie müssen ein Element x in einer einzelnen verketteten Liste suchen
def search(self, x):
position = 1
p =self.start
while p is not None:
if p.info == x:
print(x, " is at position ", position)
return True
position += 1
p = p.link
else:
print(x, "not found in list")
return False
Wenn also die while-Bedingungen fehlschlagen, wird else ausgeführt, ich hoffe, das hilft!
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.