Противоположность Python для … еще

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

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

Однако то, что я хочу, является противоположностью этого. Там какой-либо путь еще еще состоит в том, чтобы сделать для... (или в то время как...) цикл, но только еще выполнитесь код, если цикл действительно повреждался?

6
задан John Howard 21 July 2010 в 03:16
поделиться

3 ответа

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

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

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

16
ответ дан 8 December 2019 в 04:07
поделиться

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

try:
    for n in range(15):
        if n == 10:
            n = 1200
            raise StopIteration()
        if n > 4:
            n = 1400
            raise StopIteration()
except StopIteration:
    print n
6
ответ дан 8 December 2019 в 04:07
поделиться

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

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

if _break:
    print(n)

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

for n in range(15):
    if n == 100:
        break
else:
    return
print(n)
4
ответ дан 8 December 2019 в 04:07
поделиться
Другие вопросы по тегам:

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