while true loop how example end python syntax while-loop if-statement

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áusula else . Una instrucción de continue 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á.