Питон, как завершить вложенные циклы без exit()
numbers=['']
n=int(input())
for _ in range(n): numbers.append(int(input()))
s=int(input())
for i in reversed(range(1,n+1)):
for g in range(1,i+1):
if numbers[i]*numbers[g]==s:
# Тут надо чтоб циклы прервались.
Вот код, мне нужно, чтобы при выполнении условия заканчивался вложенный цикл и основной. Как это можно сделать без доп условий или метода exit()?
Ответы (4 шт):
Автор решения: Oopss
→ Ссылка
def f():
numbers=['']
n=int(input())
for _ in range(n):
numbers.append(int(input()))
s=int(input())
for i in reversed(range(1,n+1)):
for g in range(1,i+1):
if numbers[i]*numbers[g]==s:
# Тут надо чтоб циклы прервались.
return
Автор решения: Nikolai Vorobiev
→ Ссылка
Try/except.
try:
for i in reversed(range(1,n+1)):
for g in range(1,i+1):
if numbers[i]*numbers[g]==s:
# Тут надо чтоб циклы…
raise Exception
except Exception:
pass
#Идём дальше
Автор решения: Stanislav Volodarskiy
→ Ссылка
for i, g in ((i, g) for i in reversed(range(1, n + 1)) for g in range(1, i + 1)):
if numbers[i] * numbers[g] == s:
break
P.S. Любой каприз за ваши деньги.
P.P.S. В вашем коде обращения за конец списка и первый элемент не обрабатывается. Это я не правил.
P.P.P.S. В питоне такие вещи делаются отдельным генератором, но это с функциями если.
Автор решения: vitidev
→ Ссылка
Вот так
for x in xrange(10):
for y in xrange(10):
print x*y
if x*y > 50:
break
else:
continue
break
Если вложенный цикл дошел до конца, то сработает continue для внешнего цикла. Если же был прерван по break, то else не сработает и он дойдет до break внешнего цикла
Точно так же можно повышать уровни вложенности. Вот пример для трех
for x in xrange(10):
for y in xrange(10):
for z in xrange(10):
print x,y,z
if x*y*z == 30:
break
else:
continue
break
else:
continue
break