Я погоджуюся, це більше схоже на "elif not [умова (и) перерва на підвищення"] ".
Я знаю, що це стара тема, але я зараз переглядаю те саме питання, і я не впевнений, що хтось схопив відповідь на це питання так, як я це розумію.
Для мене існують три способи "читання" else
у For... else
або While... else
твердженнях, всі вони рівнозначні:
else
==
if the loop completes normally (without a break or error)
else
==
if the loop does not encounter a break
else
==
else not (condition raising break)
(імовірно, існує така умова, або у вас не було б циклу)
Отже, по суті, "else" в циклі - це справді "elif ...", де "..." є (1) немає перерви, що еквівалентно (2) NOT [умова (s) підвищення перерви].
Я думаю, що ключовим є те, що else
безглуздий без "перерви", тому for...else
включає:
for:
do stuff
conditional break # implied by else
else not break:
do more stuff
Отже, істотними елементами for...else
циклу є наступні, і ви їх читали більш простою англійською мовою як:
for:
do stuff
condition:
break
else: # read as "else not break" or "else not condition"
do more stuff
Як говорили інші плакати, зазвичай робиться перерва, коли ви зможете знайти те, що шукає ваш цикл, тому else:
стає "що робити, якщо цільовий елемент не знаходиться".
Приклад
Ви також можете використовувати обробку винятків, перерви та петлі разом.
for x in range(0,3):
print("x: {}".format(x))
if x == 2:
try:
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
except:
print(AssertionError("ASSERTION ERROR: x is {}".format(x)))
break
else:
print("X loop complete without error")
Результат
x: 0
x: 1
x: 2
ASSERTION ERROR: x is 2
----------
# loop not completed (hit break), so else didn't run
Приклад
Простий приклад, коли перерва потрапляє.
for y in range(0,3):
print("y: {}".format(y))
if y == 2: # will be executed
print("BREAK: y is {}\n----------".format(y))
break
else: # not executed because break is hit
print("y_loop completed without break----------\n")
Результат
y: 0
y: 1
y: 2
BREAK: y is 2
----------
# loop not completed (hit break), so else didn't run
Приклад
Простий приклад, коли немає перерви, немає умови, що підвищує перерву, і не виникає помилок.
for z in range(0,3):
print("z: {}".format(z))
if z == 4: # will not be executed
print("BREAK: z is {}\n".format(y))
break
if z == 4: # will not be executed
raise AssertionError("ASSERTION ERROR: x is {}".format(x))
else:
print("z_loop complete without break or error\n----------\n")
Результат
z: 0
z: 1
z: 2
z_loop complete without break or error
----------