true - while break python
Otra cláusula en Python mientras declaración (8)
El mejor uso de ''while: else:'' en Python debería ser si no se ejecuta ningún bucle en ''while'' y se ejecuta la instrucción ''else''. La forma en que funciona hoy no tiene sentido porque puede usar el siguiente código con los mismos resultados ...
n = 5
while n != 0:
print n
n -= 1
print "what the..."
He notado que el siguiente código es legal en Python. Mi pregunta es ¿por qué? Hay una razón específica?
n = 5
while n != 0:
print n
n -= 1
else:
print "what the..."
En respuesta a Is there a specific reason?
Aquí hay una aplicación interesante: salir de múltiples niveles de bucle.
Así es como funciona: el bucle externo tiene una ruptura al final, por lo que solo se ejecutará una vez. Sin embargo, si el bucle interno se completa (no encuentra divisor), entonces llega a la sentencia else y nunca se alcanza la ruptura externa. De esta manera, una ruptura en el bucle interno saldrá de ambos bucles, en lugar de solo uno.
for k in [2, 3, 5, 7, 11, 13, 17, 25]:
for m in range(2, 10):
if k == m:
continue
print ''trying %s %% %s'' % (k, m)
if k % m == 0:
print ''found a divisor: %d %% %d; breaking out of loop'' % (k, m)
break
else:
continue
print ''breaking another level of loop''
break
else:
print ''no divisor could be found!''
Tanto para while
como for
loops, la instrucción else
se ejecuta al final, a menos que se haya utilizado break
.
En la mayoría de los casos, hay mejores maneras de hacerlo (envolviéndolo en una función o generando una excepción), ¡pero esto funciona!
Es útil para la interacción social.
while (Date != "January 1st"):
time.sleep(1)
else:
print("Happy new year!")
La cláusula else
se ejecuta si sale de un bloque normalmente, al golpear la condición de bucle o al caer de la parte inferior de un bloque try. No se ejecuta si break
o return
de un bloque, o si genera una excepción. Funciona no solo para el tiempo y para los bucles, sino también para probar bloques.
Por lo general, lo encontrará en lugares donde normalmente saldría temprano de un bucle, y correr fuera del final del bucle es una ocasión inesperada / inusual. Por ejemplo, si recorres una lista en busca de un valor:
for value in values:
if value == 5:
print "Found it!"
break
else:
print "Nowhere to be found. :-("
La cláusula else
solo se ejecuta cuando su condición while
se vuelve falsa. Si sale del bucle, o si se produce una excepción, no se ejecutará.
Una forma de pensarlo es como una construcción if / else con respecto a la condición:
if condition:
handle_true()
else:
handle_false()
es análogo a la construcción en bucle:
while condition:
handle_true()
else:
# condition is false now, handle and go on with the rest of the program
handle_false()
Un ejemplo podría estar en la línea de:
while value < threshold:
if not process_acceptable_value(value):
# something went wrong, exit the loop; don''t pass go, don''t collect 200
break
value = update(value)
else:
# value >= threshold; pass go, collect 200
handle_threshold_reached()
La cláusula else se ejecuta cuando la condición while se evalúa como falsa.
De la documentation :
La instrucción while se utiliza para la ejecución repetida siempre que una expresión sea verdadera:
while_stmt ::= "while" expression ":" suite ["else" ":" suite]
Esto prueba repetidamente la expresión y, si es verdadera, ejecuta la primera suite; si la expresión es falsa (que puede ser la primera vez que se prueba), se ejecuta la suite de la cláusula
else
, si está presente, y el bucle termina.Una sentencia de
break
ejecutada en la primera suite termina el bucle sin ejecutar la suite de la cláusulaelse
. Una instrucción decontinue
ejecutada en el primer conjunto omite el resto del conjunto y vuelve a probar la expresión.
La instrucción else:
se ejecuta cuando y solo cuando el bucle while ya no cumple su condición (en su ejemplo, cuando n != 0
es falso).
Así que la salida sería esta:
5
4
3
2
1
what the...
Mi respuesta se centrará en CUÁNDO podemos usar while / for-else.
A primera vista, parece que no hay diferencia cuando se usa
while CONDITION:
EXPRESSIONS
print ''ELSE''
print ''The next statement''
y
while CONDITION:
EXPRESSIONS
else:
print ''ELSE''
print ''The next statement''
Debido a que la declaración de print ''ELSE''
parece ejecutarse siempre en ambos casos (tanto cuando el ciclo while terminó como cuando no se ejecutó)
Entonces, solo será diferente cuando no se ejecute la declaración print ''ELSE''
. Es cuando hay una break
dentro del bloque de código debajo de
In [17]: i = 0
In [18]: while i < 5:
print i
if i == 2:
break
i = i +1
else:
print ''ELSE''
print ''The next statement''
....:
0
1
2
The next statement
Si difieren a:
In [19]: i = 0
In [20]: while i < 5:
print i
if i == 2:
break
i = i +1
print ''ELSE''
print ''The next statement''
....:
0
1
2
ELSE
The next statement
return
no está en esta categoría, porque hace el mismo efecto para los dos casos anteriores.
el aumento de excepción tampoco causa diferencia, porque cuando se eleva, donde el siguiente código se ejecutará es en el controlador de excepciones (excepto el bloque), el código en la cláusula else
o justo después de la cláusula while
no se ejecutará.