Control de Flujo Simple: Construcciones if
Quizá la mejor conocida de las construcciones es if ("si" en Español). Veamos un ejemplo: este script pedirá al usuario un número, luego evaluará si el número es positivo, negativo o cero mostrando el resultado en un mensaje. Bueno... abre el IDLE de Python, luego abre una ventana nueva en el menú File / New Window, pega este código en esa ventana (editor), guardalo y ejecútalo en modo consola (doble click sobre el archivo guardado). ¿entiendes el funcionamiento interno del script?, si es así ... excelente !!! , caso contrario... no te preocupes que lo explicaré en un momento
# -*- coding: utf-8 -*-primero expliquemos el funcionamiento de la construcción if
# control de flujo simple prueba_2.py
x = input('Ingrese un número: ')
if x > 0:
print 'El número es positivo'
elif x < 0:
print 'El número es negativo'
else:
print 'El número es cero'
from time import sleep
sleep(5)
if <condición_1 es verdadera> : acción 1.1 acción 1.2 . . . elif <condición_2 es verdadera> : acción 2.1 acción 2.2 . . . else : acción a acción b . . . |
Puede haber cero o más partes elif y la parte else (si no) es opcional. La palabra clave elif es una abreviatura de else if (a lo mejor viste esto en otros lenguajes de programación). Una secuencia if . . . elif . . . elif . . . es la sustituta de las sentencias switch o case de otros lenguajes. ¿Cómo se ejecuta la construcción if? ... veamos
- Primero se evalúa la condición_1 del if.
- Si la evaluación resulta verdadera, se ejecutan las acciones del if : acción 1.1, acción 1.2, acción 1.3, etc... luego de ejecutarse estas acciones, se termina toda la estructura y las demás condiciones ni siquiera se evalúan, es decir se sale completamente del if.
- Pero, si la evaluación de la condición_1 fuera falsa entonces se evalúa la condición_2 del elif. Si el resultado de esta evaluación es verdadero, entonces se ejecutan sus acciones: acción 2.1, acción 2.2, acción 2.3, etc... y luego se termina la estructura completamente.
- En caso de que las evaluaciones de las condiciones anteriores sean todas falsas, entonces se ejecutan las acciones del else y luego se termina la estructura (ten en cuenta que aquí no hay condiciones).
Para resumir, ¿cómo funciona? pues... se evalua la primera condición y luego dice: "si esta es cierta entonces ejecuto sus acciones y salgo de la estructura, pero si es falsa entonces paso a evaluar la siguiente condición", ya en la segunda condición dice: "si esta es cierta ejecuto sus acciones y luego termino la estructura, pero si es falsa, paso al siguiente"... y asi sucesivamente... Si todas son falsas dice: "ejecuto si o si las acciones de respaldo del else y salgo de la estructura".
De esto podemos notar que se ejecuta las acciones de sólo una de las condiciones, aquella que resulte verdadera.
Ahora que sabemos el funcionamiento de la estructura if, expliquemos nuestro script del ejemplo:
La línea 1 es la codificación para poder escribir carácteres como tildes, eñes y demás.
La línea 2 es un simple comentario
La línea 4 es la instrucción input que le permite al usuario ingresar data numérica a través del teclado
Las líneas 5 y 6 son la escructura if donde se evalua su condición. Si ingresamos por ejemplo x = 3 esta condición sería cierta (pues 3 es mayor que cero) y por lo tanto la instrucción print de la línea 6 al ejecutarse mostraría en pantalla el mensaje "El número es positivo."
Las líneas 7 y 8 . Si la condición en la línea 5 es falsa y si el número ingresado fuera menor que cero, por ejemplo x = -5, entonces se verifica la condición de la línea 7 y se mostraría en pantalla el mensaje "El número es negativo."
Las líneas 9 y 10. Si las condiciones anteriores son falsas, es decir si ingresamos el número x = 0 (ni negativo ni positivo) pues se ejecuta la línea 10 y la instrucción print nos mostraría "El número es cero."
Las líneas 12 y 13. Cuando ejecutamos el programa en modo consola, estas dos líneas trabajan en conjunto para pausar el programa por unos segundos antes de cerrar la ventana de ejecución; de lo contrario, el programa cerrará su ventana muy rápido.
Control de Flujo Repetitivo: Construcciones For
La construcción For (para) es un poco diferente a lo acostumbrado en C o Pascal. En lugar de recorrer siempre una progresión aritmética (como en Pascal) o dejar al programador total libertad de elección de inicialización, comprobación y salto de paso (como en C), el For de Python recorre los elementos de una secuencia (una lista o cadena), en el orden en que aparecen en la secuencia. Si no conoces C o Pascal y por lo tanto no entendiste muy bien lo que acabo de mencionar, no te preocupes que con los ejemplos que mostraré aprenderás a usar construcciones For en Python sin ningún problema, pero creo que fue necesario mencionar eso para aquellos que si conocen esos lenguajes y vean una diferencia inmediata. Veamos un primer ejemplo para tener las cosas más claras:
Observación: En esta ocasión trabajaremos en la ventana principal del IDLE (donde se ve el prompt), por lo tanto escribe una a una las instrucciones siguientes presionando Enter después de cada instrucción.
Ahora que sabemos el funcionamiento de la estructura if, expliquemos nuestro script del ejemplo:
La línea 1 es la codificación para poder escribir carácteres como tildes, eñes y demás.
La línea 2 es un simple comentario
La línea 4 es la instrucción input que le permite al usuario ingresar data numérica a través del teclado
Las líneas 5 y 6 son la escructura if donde se evalua su condición. Si ingresamos por ejemplo x = 3 esta condición sería cierta (pues 3 es mayor que cero) y por lo tanto la instrucción print de la línea 6 al ejecutarse mostraría en pantalla el mensaje "El número es positivo."
Las líneas 7 y 8 . Si la condición en la línea 5 es falsa y si el número ingresado fuera menor que cero, por ejemplo x = -5, entonces se verifica la condición de la línea 7 y se mostraría en pantalla el mensaje "El número es negativo."
Las líneas 9 y 10. Si las condiciones anteriores son falsas, es decir si ingresamos el número x = 0 (ni negativo ni positivo) pues se ejecuta la línea 10 y la instrucción print nos mostraría "El número es cero."
Las líneas 12 y 13. Cuando ejecutamos el programa en modo consola, estas dos líneas trabajan en conjunto para pausar el programa por unos segundos antes de cerrar la ventana de ejecución; de lo contrario, el programa cerrará su ventana muy rápido.
Control de Flujo Repetitivo: Construcciones For
La construcción For (para) es un poco diferente a lo acostumbrado en C o Pascal. En lugar de recorrer siempre una progresión aritmética (como en Pascal) o dejar al programador total libertad de elección de inicialización, comprobación y salto de paso (como en C), el For de Python recorre los elementos de una secuencia (una lista o cadena), en el orden en que aparecen en la secuencia. Si no conoces C o Pascal y por lo tanto no entendiste muy bien lo que acabo de mencionar, no te preocupes que con los ejemplos que mostraré aprenderás a usar construcciones For en Python sin ningún problema, pero creo que fue necesario mencionar eso para aquellos que si conocen esos lenguajes y vean una diferencia inmediata. Veamos un primer ejemplo para tener las cosas más claras:
Observación: En esta ocasión trabajaremos en la ventana principal del IDLE (donde se ve el prompt), por lo tanto escribe una a una las instrucciones siguientes presionando Enter después de cada instrucción.
>>> x = [2, 4, 9, 7, 15]
>>> x
[2, 4, 9, 7, 15]
>>> type(x)
type 'list'
>>> for i in x:
print i
2
4
9
7
15
en este ejemplo primero hemos creado una lista de números x = [2, 5, 9, 7, 15], ten cuenta que las listas se crean entre corchetes. Como observas en el ejemplo, al escribir x y luego presionar Enter vemos esa lista de números almacenados en x. ¿quieres confirmar que x es una lista porque no me crees? esta bién... escribe type(x) como en el ejemplo y Python te confirmará que x es un lista: type 'list'. Ahora veamos lo que nos interesa "La construcción For" en este caso aplicado a una lista numérica.
Te explico... todo empieza con la variable i. Primero nota que esta variable i no fue declarada previamente, pues es la primera vez que aparece ¿por qué? como te mencióne en un post anterior, en Python se puede usar las variables que queramos sin decir el tipo de ellas (no es necesario declarar las variables como string, integer, float, etc... para nada. Es lo bueno de Python !!!).
Aclarado esto (a lo mejor ni lo notaste pero ahora ya sabes) ¿Cómo crees que funcione la construcción For?¿alguna idea? bueno... debes saber que For es un ciclo repetitivo donde las acciones dentro del For se repetirán tantas veces como la longitud de la variable x, en este caso 5 veces (pues x tiene 5 elementos).¿Como se inicia? La variable i toma como valor al primer elemento de la lista x ( es decir i = 2 ) y ejecuta todas las acciones dentro de la construcción (en nuestro caso sólo imprime el valor de i en pantalla), luego regresa y esta ves i toma como valor al segundo elemento de x ( es decir i = 4 ) y otra vez se ejecuta las mismas acciones que para el caso anterior (imprime en pantalla en nuestro ejemplo) y asi sucesivamente hasta que i toma el último valor de la lista x ( es decir i = 15 ) donde se ejecutan las acciones por última vez, luego de que i toma cada uno de los valores de la lista x, se termina el ciclo repetitivo For. ¿Fácil verdad?
Hemos visto un ejemplo con una lista numérica, pero esto tambien es posible con una lista de strings o cadenas de texto. Veamos el segundo ejemplo:
>>> y = ["hola","saludos","adios"]
>>> y
['hola', 'saludos', 'adios']
>>> type(x)
type 'list'
>>> for j in y:
print j
hola
saludos
adios
La misma idea del ejemplo anterior, sólo que ahora la variable de recorrido es j la misma que uno a uno se autoasigna los elementos de la lista y que es una lista de strings. Sencillo verdad ??
Control de Flujo Repetitivo: Construcciones While
Esta construcción ya la vimos en el post anterior Primer script en el lenguaje Python. En ese post, estudiamos el funcionamiento de este bucle con detalle. Recordemos algo, con el siguiente ejemplo:
Abre una ventana nueva en menú File / New Window y escribe el siguiente código y guardalo. A continuación paso a explicar las líneas:
# -*- coding: utf-8 -*-
# construcción while
x = 4
while x > 0:
print x
x = x-1
if x == 0:
print 'el bucle se acabó'
from time import sleep
sleep(5)
ejecuta el script ya sea en modo consola o usando el IDLE con F5. Verás que se ejecuta muy rápido, no toma ni un segundo en mostrar este resultado:
>>> ================================ RESTART ================================
>>>
4
3
2
1
el bucle se acabó
>>>
Expliquemos el funcionamiento. Bueno, creamos una variable x = 4... luego viene el bucle While ¿Cómo funciona? pues asi:
- Evalua la condición x > 0
- Si al evaluar la condición esta resulta verdadera entonces se ejecutan las acciones del bucle que en nuestro problema son: (a) imprimir en pantalla el número, (b) restarle al número una unidad y luego (3) verificar si x en ese instante es cero o no. Luego que todas las acciones se han ejecutado, se regresa al punto 1. y nuevamente se evalua la misma condición (recuerda que x ya cambió de valor) y asi sucesivamente.
- Termina la estructura cuando el resultado de la condición es falso.
En nuestro ejemplo, en cada instante del bucle se trata de verificar si x > 0. Al confirmarse ello, el valor de x diminuye en una unidad según la línea x = x-1 y se autoasigna a si mimo el nuevo valor disminuido, es decir los valores que toma la variable x son {4, 3, 2, 1, 0} una vez por cada ciclo ¿pero el 0 no se muestra? Cierto... pero el último valor de x es cero momento en el cual se ejecuta la condicion del if mostrando el mensaje "el bucle se acabó" (pues 0 > 0 es falso) y allí termina el bucle.
Nuestro ejemplo es un bucle que termina o finito, pero ¿hay bucles infinitos? Si... mira el siguiente ejemplo y ejecútalo:
# -*- coding: utf-8 -*-ejecútalo con F5 o en modo consola... y sorpresa !!!! el script corre y corre y no se detiene mostrándonos números en una columna uno debajo del otro... dejalo por horas si quieres pero nunca se cerrará la ventana por si sola. Ok.. no te asustes...cierra la ventana como lo habitual y listo se acabó el programa. ¿por qué sucedió esto? Es fácil darse cuenta donde esta el problema: la condicion y la línea x = x+1. Con esta última línea x tomará los valores {1,2,3,4,5,6,7,8,9,10,11,...} y si ves la condición, x siempre es mayor que cero... por eso el bucle es infinito.
# construcción while: bucle infinito
x = 1
while x > 0:
print x
x = x+1
from time import sleep
sleep(5)
Te preguntarás ¿Para qué me puede servir un bucle infinito si parece un error del programador? Bueno... en nuestro ejemplo es obviamente un error, pero eso no significa que todo bucle infinito lo sea... Más adelante, cuando empecemos a programar juegos con Python y Pygame verás la utilidad de los bucles infinitos y es más, ellos son la parte principal del juego. Si... leiste bien. Aprenderemos a hacer nuestros propios juegos en Python usando Pygame... así que espera que eso ya viene pronto. Por el momento hay que ir entendiendo conceptos básicos pero sólidos sobre lo que usaremos en programas mas complejos.
Bueno... esto sería todo en este post... ya conocemos algo más y poco a poco ya estamos adquiriendo más confianza con los conceptos básicos de programación en python. Nos vemos en la próxima entrega