Tutorial de Python para Machine Learning III - Control de flujo

Publicado por @SpainML el Nov. 30, 2019, 7:28 p.m.
Esta es la tercera entrega de la serie de tutoriales sobre Python. En la [primera][1] entrega hablamos sobre tipos simples, mientras que en la [segunda][2] describimos las secuencias, sets y diccionarios. Hoy nos centraremos en aprender las estructuras de control de flujo en Python que determinarán la forma de ejecución de nuestros programas. Si necesitas ayuda o tienes cualquier sugerencia, escríbenos por [Slack][3] o en el apartado de [contacto][4]. # Control de flujo El tutorial cuenta con tres apartados distintos: condiciones, bucles y control adicional. ## Condiciones: if / elif /else En python la forma de hacer que se ejecute una parte del código si se cumple cierta condición se consigue con los if como en los demás lenguajes. El típico else if se transforma en elif y la opción por defecto se deja con else. ```python In[1] interruptor_1 = 1 interruptor_2 = 0 ``` ```python In[2] if (interruptor_1 == 1) and (interruptor_2 == 1): print("Luces encendidas") else: print("Luces apagadas") ``` *`Out[2] Luces apagadas`* ```python In[3] if (interruptor_1 == 1) and (interruptor_2 == 1): print("Luces encendidas") elif interruptor_1 == 1: print("Luz 1 encendida") elif interruptor_2 == 1: print("Luz 2 encendida") else: print("Luces apagadas") ``` *`Out[3] Luz 1 encendida`* ## Bucles ### For Los blucles for ejecutan una acción para cada elemento de un conjunto que se le pase como argumento. Vamos a verlo en acción con las listas, ranges y diccionarios que vimos en el capítulo anterior. ```python In[4] for i in [0,1,2,3,4]: print(i+5) ``` *`Out[4] 5 6 7 8 9`* ```python In[5] for i in range(5): print(i) ``` *`Out[5] 0 1 2 3 4`* ```python In[6] for i in range(1,5): print(i) ``` *`Out[6] 1 2 3 4`* ```python In[7] aux_dict = {"a":1, "b":2} for k in aux_dict: print(k) ``` *`Out[7] a b`* ```python In[8] for k in aux_dict.values(): print(k) ``` *`Out[8] 1 2`* ```python In[9] for k,v in aux_dict.items(): print(k,v) ``` *`Out[9] a 1 b 2`* Por supuesto, los for pueden anidarse en Python como se muestra a continuación. ```python In[10] for i in [0,1]: for j in [0,1]: print(i,j) ``` *`Out[10] 0 0 0 1 1 0 1 1`* ```python In[11] for i in [0,1]: for j in [0,1]: interruptor_1 = i interruptor_2 = j if (interruptor_1 == 1) and (interruptor_2 == 1): print("Luces encendidas") elif interruptor_1 == 1: print("Luz 1 encendida") elif interruptor_2 == 1: print("Luz 2 encendida") else: print("Luces apagadas") ``` *`Out[11] Luces apagadas Luz 2 encendida Luz 1 encendida Luces encendidas`* ### While Por último, los while ejecutan el código mientras que la condición de la que parten sea True. ```python In[12] x = 0 while x < 5: print(x) x += 1 # x = x + 1 ``` *`Out[12] 0 1 2 3 4`* ## Control adicional: break / continue Una vez hemos conocido los bucles, toca conocer una serie de sentencias de control que permiten gestionar distintas casuísticas que puede que necesitemos a la hora de diseñar nuestro código. ### Break Con break salimos de la ejecución del bucle inmediatamente superior en el que estaba ejecutándose el programa. En este primer caso, al llegar a i==3, saldríamos del for. ```python In[13] for i in [1,2,3,4]: if i == 3: break else: print(i) ``` *`Out[13] 1 2`* En el caso de que tengamos un bucle anidado dentro de otro, al salir únicamente del bucle inmediatamente superior al que se está ejecutando, sólo salimos del bucle j, pero el bucle i no se ve afectado por ello en ningún momento. Es decir, cada vez que j == 2, saltamos hacia la siguiente ejecución del bucle i. Por ello, siempre se imprime por pantalla el índice i cada vez que j llega a ser 1 (1 1, 2 1, 3 1 y 4 1). ```python In[14] for i in [1,2,3,4]: for j in [1,2,3,4]: if j == 2: break else: print(i,j) ``` *`Out[14] 1 1 2 1 3 1 4 1`* ### Continue Con continue pasamos a la siguiente ejecución del bucle en el que nos encontramos, sin salir de él. ```python In[15] for i in [1,2,3,4]: if i == 3: continue else: print(i) ``` *`Out[15] 1 2 4`* En este caso se observa la diferencia de continue y break. En el caso de break, nunca se imprimía por pantalla j cuando valía 2 o más. Sin embargo, en este caso j nunca se imprime en caso de que valga 2, pero sí se imprime en los casos en los que vale 3 y 4. ```python In[16] for i in [1,2,3,4]: for j in [1,2,3,4]: if j == 2: continue else: print(i,j) ``` *`Out[16] 1 1 1 3 1 4 2 1 2 3 2 4 3 1 3 3 3 4 4 1 4 3 4 4`* [1]: https://spainml.com/blog/tutorial-de-python-para-machine-learning-i-tipos-simples [2]: https://spainml.com/blog/tutorial-de-python-para-machine-learning-ii-secuencias [3]: http://bit.ly/JoinSpainML [4]: https://spainml.com/contacto