2.4. Control de flujo

En esta sección veremos el control de flujo de nuestros scripts. Cuando hablamos de control de flujo estamos hablando de sentencias que nos harán ejecutar un código u otro según una serie de condiciones, o repetir un código mientras se cumpla alguna condición concreta.

2.4.1. Sentencia IF

Con esta setencia podemos hacer que un código haga una cosa u otra según una condición. Veamos un ejemplo para verlo más claro:

>>> number = 13
>>>	if number == 13:
>>>	    print "El numero tiene el valor 13"
>>>	else:
>>>	    print "El numero no tiene el valor 13"
	  

El código de este ejemplo se encuentra en el archivo "sample03.py".

En la primera línea creamos una variable con el valor "13", luego le preguntamos a Python si esa variable tiene ese valor. Fijaos en la setencia, esta es una sentecia de comparación. En nuestro código comparamos si el valor contenido en la variable "numero" tiene el valor "13", si es así escribimos la cadena "El número tiene el valor 13" y si no (else) escribimos "El número no tiene el valor 13". Sencillo ¿no?. No confudamos "==" con "=", mientras la primera sirve para comparar, la segunda sirve para asignar un valor. Los "==" sólo se utilizan en sentencias de comparación como estas y las que vamos a ver durante esta sección. Puedes cambiar el valor de la variable number para comprobar como trabaja "if".

A continuación mostramos las posibles asignaciones que podemos utilizar:

Fijaos en este código:

>>> number = 13
>>>	if number > 10:
>>>	    print "El numero es mayor que 10"
>>>	else:
>>>	    print "El numero es menor o igual que 10"
	  

El código de este ejemplo se encuentra en el archivo "sample04.py".

Aunque este pequeño código es un poco inútil, nos podemos hacer una idea de como podemos utilizarlo. Por ejemplo, imaginaos que necesitamos que el usuario inserte un valor en nuestro script (ya veremos como el usuario introduce valores) y tenemos que comprobar que ese valor no sea mayor a un número concreto. Por ejemplo, el usuario tiene que redimensionar una imagen pero no queremos que la imagen sea mayor a 600 pixels, pues podemos con una sentencia como esta hacer las comprobaciones necesarias para que no se de el caso.

Con la sentencia IF podemos hacer más de una comprobación. En otro lenguajes son las sentencias SWITCH o CASE las que hacen este trabajo, en Python lo hacemos así:

>>> number = 13
>>>	if number < 10:
>>>	    print "El numero es menor que 10"
>>>	elif number < 20:
>>>	    print "El numero es menor que 20"
>>>	else:
>>>	    print "El numero es mayor o igual a 20"
	  

El código de este ejemplo se encuentra en el archivo "sample05.py".

Esta sentencia va comprobando una a una en orden cada una de las condiciones, si la primera no es cierta pasa a la segunda, y así hasta el final. Si no se da ninguna de las condiciones anteriores pues hace el "else". En nuestro caso entraría por la segunda condición.

Por último vamos a ver como hacer varias comprobaciones en una sólo sentencia. Imaginaos que necesitamos comprobar si un número se encuentra entre dos valores. Por ejemplo necesitamos saber que si el número está entre el 10 y el 20. Para ello tenemos que comprobar si el número es mayor que 10 y también menor que 20, todo en la misma condición. Para esto usamos "and". Sería así:

>>> number = 13
>>>	if number > 10 and number < 20:
>>>	    print "El numero esta entre 10 y 20"
>>>	else:
>>>	    print "El numero no esta entre 10 y 20"
	  

El código de este ejemplo se encuentra en el archivo "sample06.py".

Fijaos como hay dos condiciones y están unidas por "and". Se leería así: "SI numero es mayor a 10 Y numero es menor a 20". Para que ejecute ese código se tienen que dar las dos condiciones obligatoriamente.

Ahora imaginaros que necesitamos saber si un valor es menor a 10 o es mayor que 20. Para esto necesitamos utilizar "or". Esto entra por esa sentencia si una de las dos condiciones se cumple. Sería así:

		>>> number = 13
		>>>	if number < 10 or number > 20:
		>>>		print "El numero es menor a 10 o mayor a 20"
		>>>	else:
		>>>		print "El numero no es menor a 10 ni mayor a 20"
	  

El código de este ejemplo se encuentra en el archivo "sample07.py".

En nuestro caso entraría por el "else". Podemos poner tantas condiciones como queremos separadas por "and" o "or". Para poder agruparlas y Python "no se líe" lo mejor es poner paréntesis. Miremos este código para finalizar:

>>> number = 33
>>>	if (number > 10 and number < 20) or number > 50:
>>>	    print "Esto es verdad"
>>>	else:
>>>	    print "Esto es mentira"
	  

El código de este ejemplo se encuentra en el archivo "sample08.py".

En nuestro ejemplo nos pondrán por mentiroso, y con toda la razón. El número 33 no forma parte de nuestra condición. Para que entrase en nuestra condición, o es un número que se encuentra entre el 10 y el 20, o es un número mayor de 50, por lo que el 33 no entra dentro de este rango.

2.4.2. Sentencia WHILE

Con este sentencia vamos a conseguir que un trozo de código se repita en un bucle mientras que se cumpla una condición. Veamos un ejemplo:

>>> n = 0
>>> while n < 10:
>>>     print "Numero: " + str(n)
>>>     n = n + 1
	  

El código de este ejemplo se encuentra en el archivo "sample09.py".

Expliquemos un poco este código. Lo primero que hacemos es crear una variable que la igualamos a 0. En la segunda línea comienza nuestro bucle. Ponemos la palabra reservada "while", a continuación nuestra condición y por último ponemos ":". A partir de aquí se va a repetir el código indentado (código que forma parte de nuestro bucle) mientras esa condición sea verdadera. Nuestro ejemplo lo que hace es imprimir el número por pantalla y luego sumamos 1 a la variable "n". Como resultado tenemos esto:

>>> Numero: 0
>>> Numero: 1
>>> Numero: 2
>>> Numero: 3
>>> Numero: 4
>>> Numero: 5
>>> Numero: 6
>>> Numero: 7
>>> Numero: 8
>>> Numero: 9
	  

En el momento que la variable llegue a "10" la condición no se cumple y por tanto sale del bucle, y en nuestro caso sale de nuestro programa.

Al igual que en las condiciones en IF podemos utilizar diferentes operadores y "and" y "or" para poder tener varias condiciones en una misma sentencia WHILE.

Tienes que entender la importante en el código de la línea "n = n + 1". Si no se pusiera sea línea la condición siempre se cumpliría por lo que entraríamos en un bucle infinito y nuestro programa se quedaría bloqueado.

2.4.3. Sentencia FOR

Cómo explicamos al principio de este documento Python trabaja con diferentes tipos de datos. Dijimos que a parte de lo que vimos existían otros como tuplas, diccionarios y listas. Podéis ver la bibligrafía donde se dan algunos tutoriales que explican estos tipos con detalle. A lo que vamos. La sentencia FOR nos va a ayudar a recorrer este tipo de datos. Vamos a explicar las listas por encima y como recorrerlas porque puede ser interesante para nuestros scripts. Podemos pensar en las listas como un grupo de variables. Por ejemplo podemos tener una lista con los colores y luego podemos ir sacando estos datos de la lista. Veamos un ejemplo:

>>> colors = ["negro", "blanco", "verde", "amarillo", "rojo"]
	  

Para crear una lista tenemos que colocar entre corchetes los elementos separados por comas. Luego para poder sacar un dato de la lista lo podemos hacer mediante el índice. Así el primer valor es el 0, el segundo el 1, y así hasta el final. Por ejemplo:

>>> print colors[1]
	  

Esto sacará por pantalla la palabra "blanco" que es el valor que corresponde con el segundo lugar de la lista.

Tenemos varios métodos para poder trabajar con las listas. Por ejemplo el método "append" nos añade un valor a la lista después de crearla. El método "remove" elimina un valor. También podemos ver el tamaño de la lista con el método "len" pasándole como parámetro el nombre de esta. Vemos un ejemplo:

>>> # creamos la lista
>>> colors = ["negro", "blanco", "verde", "amarillo", "rojo"]
>>> # mostramos el numero de colores y los colores que tenemos en la lista
>>> print "Numero de colores: " + str(len(colors))
>>> print colors
>>> # agregados dos nuevos colores
>>> colors.append("naranja")
>>> colors.append("lila")
>>> # mostramos el numero de colores y los colores que tenemos en la lista
>>> print "Numero de colores: " + str(len(colors))
>>> print colors
>>> # borramos un color
>>> colors.remove("blanco")
>>> # mostramos el numero de colores y los colores que tenemos en la lista
>>> print "Numero de colores: " + str(len(colors))
>>> print colors
	  

El código de este ejemplo se encuentra en el archivo "sample10.py".

Obtenemos como resultado lo siguiente:

>>> Numero de colores: 5
>>> ['negro', 'blanco', 'verde', 'amarillo', 'rojo']
>>> Numero de colores: 7
>>> ['negro', 'blanco', 'verde', 'amarillo', 'rojo', 'naranja', 'lila']
>>> Numero de colores: 6
>>> ['negro', 'verde', 'amarillo', 'rojo', 'naranja', 'lila']
	  

Nos fijamos como agregamos y eliminamos los valores a la lista. Ahora ya podemos ver la sentencia FOR. Con esta sentencia podemos recorrer los valores de una lista. Veamos un ejemplo:

>>> colors = ["negro", "blanco", "verde", "amarillo", "rojo"]
>>> for item in colors:
>>>     print item
	  

El código de este ejemplo se encuentra en el archivo "sample11.py".

Primero ponemos la palabra "for" y luego el nombre de una variable. En esta variable se va a introducir el valor de cada item de nuestra lista en cada vuelta empezando desde el principio de esta, luego ponemos la palabra "in", seguida del nombre de la lista y por último ":". El código indentado que aparezca luego de la sentencia FOR formará parte del bucle. En nuestro caso lo único que hace es imprimir el valor del "item" (nombre de variable que le hemos puesto para idenficar el valor del elemento en cada vuelta del bucle). El bucle terminará cuando no existan más valores en la lista.