El bloque else en las instrucciones while y for
El bucle while y la rama else
Ambos bucles while y for, tienen una característica interesante. Veamos el siguiente ejemplo:
i = 1
while i < 5:
print(i)
i += 1
else:
print("else:", i)
- Los bucles también pueden tener la rama
else, como losif. - La rama
elsedel bucle siempre se ejecuta una vez, independientemente de si el bucle ha entrado o no en su cuerpo.
Vamos a modificar el código para que no se ejecute el bucle:
i = 5
while i < 5:
print(i)
i += 1
else:
print("else:", i)
La condición que se evalúa en el bucle while es False al principio, opero puedes verificar que la rama else también se ejecuta.
El bucle for y la rama else
Los bucles for se comportan de manera un poco diferente. Veamos un ejemplo:
for i in range(5):
print(i)
else:
print("else:", i)
- En este caso la rama
elsese ejecuta siempre al final de la ejecución del bucle. - La salida puede ser un poco sorprendente: la variable
iconserva su último valor.
¿Qué ocurre si el bucle for no se ejecuta`? Vamos a modificar el código para evitar la ejecución del bucle:
i = 111
for i in range(2, 1):
print(i)
else:
print("else:", i)
- El cuerpo del bucle no se ejecutará aquí en absoluto, ya que hemos asignado la variable
iantes del bucle. - Cuando el cuerpo del bucle no se ejecuta, la variable de control conserva el valor que tenía antes del bucle.
- Si la variable de control no existe antes de que comience el bucle, no existirá cuando la ejecución llegue a la rama
else.
Cuestionario
-
Crea un bucle
forque cuente de 0 a 10, e imprima números impares en la pantalla. Usa el esqueleto de abajo:for i in range(1, 11): # Línea de código. # Línea de código. -
Crea un bucle
whileque cuente de 0 a 10, e imprima números impares en la pantalla. Usa el esqueleto de abajo:x = 1 while x < 11: # Línea de código. # Línea de código. # Línea de código. -
Crea un programa con un bucle
fory una instrucciónbreak. El programa debe iterar sobre los caracteres en una dirección de correo electrónico, salir del bucle cuando llegue al símbolo@e imprimir la parte antes de@en una línea. Usa el esqueleto de abajo:for ch in "john.smith@pythoninstitute.org": if ch == "@": # Línea de código. # Línea de código. -
Crea un programa con un bucle
fory una instruccióncontinue. El programa debe iterar sobre una cadena de dígitos, reemplazar cada0conx, e imprimir la cadena modificada en la pantalla. Usa el esqueleto de abajo:for digit in "0165031806510": if digit == "0": # Línea de código. # Línea de código. # Línea de código. -
¿Cuál es la salida del siguiente código?
n = 3 while n > 0: print(n + 1) n -= 1 else: print(n) -
¿Cuál es la salida del siguiente código?
n = range(4) for num in n: print(num - 1) else: print(num) -
¿Cuál es la salida del siguiente código?
for i in range(0, 6, 3): print(i)
Solución cuestionario
-
Pregunta 1:
for i in range(0, 11): if i % 2 != 0: print(i) -
Pregunta 2:
x = 1 while x < 11: if x % 2 != 0: print(x) x += 1 -
Pregunta 3:
for ch in "john.smith@pythoninstitute.org": if ch == "@": break print(ch, end="") -
Pregunta 4:
for digit in "0165031806510": if digit == "0": print("x", end="") continue print(digit, end="") -
Pregunta 5:
4 3 2 0 -
Pregunta 6:
-1 0 1 2 3 -
Pregunta 7:
0 3