Напротив Python для ... еще - PullRequest
6 голосов
/ 21 июля 2010

Следующий код Python приведет к печати n (14), поскольку цикл for завершен.

for n in range(15):
    if n == 100:
        break
else:
    print(n)

Однако то, что я хочу, является противоположностью этого.Есть ли способ сделать цикл for ... else (или while ... else), но выполнить код else только в том случае, если цикл did break?

Ответы [ 4 ]

16 голосов
/ 21 июля 2010

Не существует явной for...elseifbreak -подобной конструкции в Python (или на любом другом из известных мне языков), потому что вы можете просто сделать это:

for n in range(15): 
    if n == 100:
        print(n)  
        break

Если у вас несколько break с, введите print(n) в функцию, чтобы вы не повторяли себя .

6 голосов
/ 21 июля 2010

Немного более универсальное решение с использованием исключений, если вы разбиваете несколько точек в цикле и не хотите дублировать код:

try:
    for n in range(15):
        if n == 10:
            n = 1200
            raise StopIteration()
        if n > 4:
            n = 1400
            raise StopIteration()
except StopIteration:
    print n
4 голосов
/ 21 июля 2010

Мне не очень понравились ответы, опубликованные до сих пор, так как все они требуют изменения тела цикла, что может быть раздражающим / рискованным, если тело действительно сложное, поэтому вот способ сделать это, используяфлаг.замените _break на found или что-то еще значимое для вашего варианта использования

_break = True
for n in range(15):
    if n == 100:
        break
else:
    _break = False

if _break:
    print(n)

Другая возможность, если это функция, которая ничего не делает, если цикл не находит совпадения, это returnв блоке else:

for n in range(15):
    if n == 100:
        break
else:
    return
print(n)
0 голосов
/ 12 февраля 2013

как насчет:

for n in range(15):
    if n == 100:
        break
else:
    print("loop successful")
if n != range(15)[-1]:
    print("loop failed")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...