outside - while break python
Python-`break` fuera de todos los bucles (4)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo salir de múltiples bucles en Python? 26 respuestas
Estoy usando múltiples bucles anidados for
. En el último ciclo hay una instrucción if
. Cuando se evalúa como True
todos los bucles for
deben detenerse, pero eso no sucede. Solo se break
fuera del círculo más interno y continúa. Necesito que todos los bucles se detengan si se encuentra la declaración de break
.
Mi código:
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
Debes poner tus loops dentro de una función y luego regresar:
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
El uso de return
sale inmediatamente de la función de cierre. En el proceso, todos los bucles se detendrán.
No estoy seguro si esta es la forma más limpia posible de hacerlo, pero podría hacer una verificación de bool en la parte superior de cada ciclo.
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
Puedes presentar una excepción
try:
for a in range(5):
for b in range(5):
if a==b==3:
raise StopIteration
print b
except StopIteration: pass
¿por qué no usar una expresión de generador?
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