Introducción a los bucles anidados de Python

Bienvenido a otro capítulo del curso de aprendizaje de Python: Nested Loops. Una excelente manera de hacer un bucle, los bucles anidados han demostrado su valía en todos los lenguajes de programación. Hoy nos centraremos específicamente en Python: los tipos, la sintaxis y los ejemplos. Entonces empecemos.

Bucles anidados

Sería bueno tocar brevemente la base de Nested Loops en general, antes de continuar con Python específicamente. Si existe un bucle dentro del cuerpo de otro bucle, se denomina Bucle anidado. Esto significa que queremos ejecutar el código del bucle interno varias veces. El bucle externo controla cuántas iteraciones sufrirá el bucle interno. Un ejemplo básico de un bucle for anidado es:

for (i=0; i<10; i++)
(
for (j=0; j<10; j++)
(
//This code will execute 100 times.
)
//This code will execute 10 times.
)

Una cosa a tener en cuenta aquí es que cualquier tipo de bucle puede anidarse dentro de otro bucle. Por ejemplo, un bucle while se puede anidar dentro de un bucle for o viceversa.

Bucles anidados de Python

1) Anidado para la sintaxis de bucle

La sintaxis básica de un bucle anidado en Python es:

for (iterating_variable_1) in (sequence_1): #Outer Loop
for (iterating_variable_2) in (iterating_variable_1/sequence_2): #Inner Loop
(code to execute)

Ejemplo

for i in range(11): #line 1
for j in range(i): #line 2
print('*', end='') #line 3
print('') #line 4

Salida:

Flujo de ejecución

Intentemos comprender el flujo de ejecución del programa anterior. En el programa, utilizamos dos variables de iteración i y j para imprimir un patrón de estrellas.

El compilador comienza con la línea 1. Encuentra un bucle for y una función de rango. La función de rango en Python genera una matriz iterable de números enteros desde 0 hasta el número especificado en el argumento. El número de argumento está excluido de la matriz. En nuestro caso, generará una matriz (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10). Ahora, el compilador sabe que debe ejecutar el siguiente conjunto de declaraciones 10 veces.

Cuando se mueve a la línea 2, encuentra otra función de bucle y rango. Tenga en cuenta que el argumento de esta función de rango es un valor calculado de nuestra variable de iteración i. Por lo tanto, genera dinámicamente una matriz según el valor de i. Cuando i = 0, la matriz está vacía. Cuando i = 1, la matriz es (0). Cuando i = 2, la matriz es (0, 1) y así sucesivamente.

Entonces, el número de veces que la línea 3 se ejecuta directamente depende del valor de i. Observe la parte end = '' en línea 3. Esto es para evitar que Python imprima un salto de línea después de cada estrella. Solo queremos un salto de línea al final de cada iteración del bucle externo. Por lo tanto, hemos impreso explícitamente un salto de línea en la línea 4 de nuestro código.

Así que ahora, examinemos de cerca cada iteración de nuestro bucle anidado.

Iteración del bucle externo 1

I = 0, j = (), output is a blank line.

Iteración del bucle externo 2

I = 1, j = (0), output = *

Iteración del bucle externo 3

I = 2, j = (0, 1), output = **

Iteración del bucle externo 4

I = 3, j = (0, 1, 2), output = ***

.
.
.

Iteración del bucle externo 10

I = 9, j = (0, 1, 2, 3, 4, 5, 6, 7, 8), output = *********

Iteración del bucle externo 11

I = 10, j = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9), output = **********

2) Anidado mientras bucle

Sintaxis

La sintaxis para anidar mientras el bucle en Python es:

while (expression_1): #Outer loop
(code to execute) #Optional
while (expression_2): #Inner loop
(code to execute)

A diferencia del ciclo for, el ciclo while no tiene una secuencia iterable precompilada. Mientras que el bucle sigue ejecutando el código hasta que la expresión se evalúe como verdadera. Por lo tanto, un desarrollador siempre debe tener en cuenta para actualizar la variable / expresión iterativa, de lo contrario, el bucle entrará en modo de ejecución infinita.

Ejemplo

i=1 #line 1
while(i<=5): #line 2
j=5 #line 3
while(j>=i): #line 4
print(j, end=' ') #line 5
j-=1 #line 6
i+=1 #line 7
print() #line 8

Salida:

Flujo de ejecución

La línea 1 del código establece la variable iterativa del bucle externo en el valor inicial. La siguiente línea es el comienzo del bucle while externo. Tiene una expresión i <= 5. Se evalúa el valor verdadero de esta expresión después de cada iteración. La ejecución ingresa al bucle solo si la condición es verdadera. Tan pronto como la condición se vuelve falsa, el ciclo termina.

Como el valor inicial de I es 1, la condición en la línea 2 es verdadera. Entonces, el compilador se mueve a la línea 3 y establece la variable iterativa de nuestro bucle interno j en 5. La línea 4 nuevamente tiene un bucle while con una expresión que se evalúa como verdadera. Entonces, el compilador ejecuta las líneas 5 y 6. Luego vuelve a la línea 4 y evalúa la condición. Si la condición es verdadera, ingresa nuevamente a las líneas 5 y 6. Si la condición se vuelve falsa, el ciclo termina y las siguientes líneas a ejecutar son las líneas 7 y 8. Lo mismo se sigue para el ciclo externo.

Las líneas 6 y 7 son muy importantes ya que actualizan nuestra variable iterativa. Sin ellos, el flujo del programa entraría en modo de ejecución infinita ya que las expresiones del bucle while siempre darían como resultado la verdad.

¿Debería romper, continuar o pasar?

Al igual que con casi todos los demás lenguajes de programación, Python también tiene el concepto de romper y continuar. Estas palabras clave ayudan a terminar cualquier ciclo u omitir una iteración particular del ciclo. Python también tiene otra palabra clave: pasar. Echemos un vistazo a estos.

1) descanso

La palabra clave break indica que el compilador salta de un bucle y termina su ejecución.

Ejemplo

for i in range(5):
for j in range(5):
if i == j:
break
print(j, end='')
print('')

Salida:

El programa anterior rompe el bucle for interno si el valor de I y j es igual. No ejecuta más iteraciones del bucle. Esto puede entenderse mejor con la declaración de continuación.

2) continuar

La palabra clave continue indica que el compilador omite la iteración actual del bucle y continúa con la siguiente iteración.

Ejemplo

for i in range(5):
for j in range(5):
if i == j:
continue
print(j, end='')
print('')

Salida:

Observe que el mismo programa, pero con la instrucción continue en lugar de break, no finaliza la ejecución del bucle. Solo omite la iteración actual.

3) Pase

La palabra clave pass es interesante en Python. Simplemente significa no hacer nada. Se usa cuando el bloque de código se necesita sintácticamente, pero no desea que se ejecute ningún comando. Simplemente actúa como un marcador de posición.

Ejemplo

for i in range(5):
for j in range(5):
if i == j:
#I am not sure what to do when i equals j, so for now I will pass.
pass
print(j, end='')
print('')

Salida:

Conclusión

Los bucles son estratégicamente muy importantes para aprender a realizar una tarea con líneas de código mínimas. Esta es solo una introducción básica a los bucles. Se recomienda jugar más, ser creativo y explorar más el potencial de los bucles.

Artículos recomendados

Esta es una guía de Python Nested Loops. Aquí discutimos los Python Nested Loops con la sintaxis, ejemplos, salida y flujo de ejecución. También puede consultar el siguiente artículo para obtener más información:

  1. Marcos de Python
  2. Cómo instalar Python
  3. Guía de bucles en Python
  4. ¿Qué es la interfaz Java?
  5. Diferentes tipos de bucles con sus ventajas
  6. Bucles en VBScript con ejemplos