Python - "вырваться" из всех петель
Я использую несколько вложенных for
петли. В последнем цикле есть if
заявление. Когда оценивается True
все for
петли должны остановиться, но этого не происходит. Это только break
из самого внутреннего for
цикл, и чем он продолжает идти. Мне нужно, чтобы все петли остановились, если break
Заявление встречается.
Мой код:
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
break
4 ответа
Решение
Вы должны поместить свои циклы в функцию и затем вернуть:
def myfunc():
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
return # Exit the function (and stop all of the loops)
myfunc() # Call the function
С помощью return
немедленно выходит из ограждающей функции. В процессе все петли будут остановлены.
Вы можете поднять исключение
try:
for a in range(5):
for b in range(5):
if a==b==3:
raise StopIteration
print b
except StopIteration: pass
Почему бы не использовать выражение генератора:
def my_iterator()
for i in range(1, 1001):
for i2 in range(i, 1001):
for i3 in range(i2, 1001):
yield i,i2,i3
for i,i2,i3 in my_iterator():
if i*i + i2*i2 == i3*i3 and i + i2 + i3 == 1000:
print i*i2*i3
break
Не уверен, что это самый чистый способ сделать это, но вы могли бы выполнить проверку bool в верхней части каждой петли.
do_loop = True
for i in range(1, 1001):
if not do_loop:
break
for i2 in range(i, 1001):
# [Loop code here]
# set do_loop to False to break parent loops