Выражение else на Python, в то время как оператор

Я заметил, что следующий код законен в Python. Мой вопрос состоит в том почему? Существует ли определенная причина?

n = 5
while n != 0:
    print n
    n -= 1
else:
    print "what the..."
293
задан Trevor Hickey 26 June 2016 в 16:13
поделиться

4 ответа

Пункт else выполняется только тогда, когда условие while становится ложным. Если вы выйдете из цикла или если возникнет исключение, оно не будет выполнено.

Можно думать об этом как о конструкции if/else относительно условия:

if condition:
    handle_true()
else:
    handle_false()

аналогично конструкции looping:

while condition:
    handle_true()
else:
    # condition is false now, handle and go on with the rest of the program
    handle_false()

Пример может быть таким:

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()
354
ответ дан 23 November 2019 в 01:38
поделиться

Клауза else выполняется, когда условие while оценивается как false.

Из документации:

Оператор while используется для повторного выполнения, пока выражение истинно:

while_stmt ::= "while" выражение ":" suite
 ["else" ":" suite]

Это многократно проверяет выражение и, если оно истинно, выполняет первый сьют; если выражение ложно (что может быть в первый раз, когда оно проверяется), то выполняется сьют пункта else, если он присутствует, и цикл завершается.

Оператор break, выполненный в первом сюите, завершает цикл, не выполняя сюиты пункта else. Оператор continue, выполненный в первом блоке, пропускает остальные блоки и возвращается к тестированию выражения.

18
ответ дан 23 November 2019 в 01:38
поделиться

Пункт else выполняется, если вы выходите из блока обычным путем, через условие цикла или выпадение из блока try. Оно не выполняется, если вы break или return выходите из блока или вызываете исключение. Это работает не только для циклов while и for, но и для блоков try.

Как правило, его можно встретить в тех случаях, когда обычно вы выходите из цикла раньше, а выход за пределы цикла - это неожиданный/необычный случай. Например, если вы перебираете список в поисках значения:

for value in values:
    if value == 5:
        print "Found it!"
        break
else:
    print "Nowhere to be found. :-("
91
ответ дан 23 November 2019 в 01:38
поделиться

Оператор else: выполняется тогда и только тогда, когда цикл while больше не удовлетворяет своему условию (в вашем примере, когда n != 0 ложно).

Таким образом, вывод будет таким:

5
4
3
2
1
what the...
0
ответ дан 23 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: