post

Python sp-ar:Control de Flujo

Contents

Introducción

En los programas que hemos visto hasta el momento, siempre han habido una serie de instrucciones que se ejecutan exactamente desde arriba hasta abajo. Pero, ¿si queremos cambiar el flujo de como funciona?. Por ejemplo, queremos que el programa tome decisiones y haga diferentes cosas dependiendo de las situaciones, ¿como imprimir ‘Buenos días’ o ‘Buenas tardes’ según la hora del día?.

Como pudo haber adivinado, esto se puede lograr usando instrucciones de control de flujo. En Python existen 3 de estas instrucciones, las cuales son – if, for y while.

La Instrucción if

La instrucción if es usada para comprobar una condición: if si la condición es verdadera, ejecutara un bloque de declaraciones (llamado bloque-if), else se procesa otro bloque de declaraciones (llamado bloque-else). La clausula Else es opcional.

Ejemplo:

#!/usr/bin/python
# Archivo: if.py

numero = 23
adivinanza = int(input('Ingrese un entero: '))

if adivinanza == numero:
    print('Felicitaciones, lo adivinaste.') # Nuevo bloque empieza aquí
    print('(pero no ganaste algún premio!)') # Nuevo bloque termina aquí
elif adivinanza < numero:
    print('No, es un poco mayor') # Otro bloque
    # Puedes hacer lo que quieras en un bloque ...
else:
    print('No, es un poco menor')
    # Usted debería haber adivinado un numero > para estar aquí

print('Listo')
# Después de que se ejecuta la sentencia if, esta ultima instrucción es ejecutada

Salida:

   $ python if.py
   Ingrese un entero: 50
   No, es un poco menor
   Listo

   $ python if.py
   Ingrese un entero: 22
   No, es un poco mayor
   Listo

   $ python if.py
   Ingrese un entero: 23
   Felicitaciones, lo adivinaste.
   (pero no ganaste algún premio!)
   Listo

Como Funciona:

En este programa, tomamos adivinanzas del usuario y comprobamos si este es el numero que tenemos. En la variable numero podemos establecer cualquier entero, como 23. Luego tomamos la adivinanza del usuario usando la función input(), las funciones solo son piezas de reusables de programas, leerás mas acerca de ellas en el siguiente capitulo.

Le suministramos una cadena la función input que viene incluida en Python, la cual la imprime y espera la respuesta del usuario. Una vez que se ingresa algo y se presiona la tecla enter, la función input retorna lo que se ingreso como un cadena de caracteres (string). Luego la cadena es convertida a un entero usando int para después ser almacenada en la variable adivinanza. Realmente, int es una clase pero lo que necesita saber por ahora es que la puede usar para convertir una cadena en un entero (asumiendo que el texto de la cadena contiene un entero valido).

Ahora, comparamos la adivinanza de el usuario con el numero que escogimos. Si son iguales, imprimimos un mensaje informando el acierto. Observe que usamos niveles de indentación para informarle a Python cuales instrucciones pertenecen a que bloque. Esta es la razón de por que la indentación es tan importante en Python. Yo espero que usted se apegue a la regla de tener una “indentación consistente”. ¿Y usted?.

Note como la instrucción if tiene un dos puntos al final – con esto le estamos indicando a Python que lo siguiente es un bloque de declaraciones.

Después, comprobamos si la adivinanza es menor que el numero, y si es así le informamos al usuario que debe adivinar un numero mayor. Para esto usamos la instrucción elif que realmente une dos instrucciones if else-if else en una instrucción combinada if-elif-else. Esto hace el programa mucho mas facíl y reduce la cantidad de indentación necesitada.

Las instrucciones elif y else también deben tener un dos puntos al final de la linea lógica seguido por su correspondiente bloque de declaraciones (claro está, con su propia indentación).

También puede tener una instrucción if en el interior de un bloque-if de otro if y incluso mas. Esto es llamado instrucciones if anidadas.

Recuerde que las partes elif y else son opcionales. Una mínima instrucción if valida es:

if True:
    print('Si, esto es verdad')

Después de que Python ha terminado de ejecutar por completo la sentencia if con sus instrucciones elif y else asociadas, este salta a la siguiente instrucción en el bloque que contenía la sentencia if inicial. En este caso, es el bloque principal (donde la ejecución del programa empieza), y la siguiente instrucción es print(Listo). Luego de esto, Python ve el final del programa y simplemente lo termina.

Aunque este es un programa muy simple, en el he estado señalando muchas cosas que usted debería tener en cuenta. Todas estas lindas, sencillas (y sorpresivamente simples para quienes tienen antecedentes en C/C++). Inicialmente va a necesitar tenerlas presentes, pero luego de alguna practica van a ser cómodas y ‘naturales’ para usted.

Nota para los programadores de C/C++
En Python no existe la instrucción switch. Para reemplazarla, puede usar las instrucciones if..elif..else (y en algunos casos, para hacerlo rápido puede usar un diccionario).

La Instrucción while

La instrucción while le permite ejecutar repetidamente un bloque de código mientras una condición sea verdadera. Una instrucción while es un ejemplo de lo que es llamado una instrucción de bucle. Una sentencia while puede tener una clausula opcional else.

Ejemplo:

#!/usr/bin/python
# Archivo: while.py

numero = 23
corriendo = True


while corriendo:
    adivinanza = int(input('Ingrese un entero: '))

    if adivinanza == numero:
        print('Felicitaciones, lo adivinaste.')
        corriendo = False # Esto hace que el bucle pare
    elif adivinanza < numero:
        print('No, es un poco mayor') # Otro bloque
    else:
        print('No, es un poco menor')
else:
    print('El bucle del while se termino')
    #Cualquier otra cosa que quiera hacer hagalo aquí

print('Listo')

Salida:

   $ python while.py
   Ingrese un entero: 50
   No, es un poco menor
   Ingrese un entero: 22
   No, es un poco mayor
   Ingrese un entero: 23
   Felicitaciones, lo adivinaste.
   El bucle del while se termino
   Listo

Como Funciona:

En este programa, continuamos con el juego de adivinar, pero la ventaja es que el usuario puede seguir jugando hasta que adivine – no hay necesidad de ejecutar repetidamente el programa para cada intento de adivinar, como lo hicimos en la sección anterior y esto es acertadamente demuestra el uso de la instrucción while.

Nosotros movimos las instrucciones input y if al interior del bucle while y establecimos la variable corriendo como True. Primero, comprobamos si la variable corriendo es True y luego procedemos a ejecutar el bloque-while correspondiente. Después de esto la condición se comprueba de nuevo, para nuestro caso la variable corriendo. Si esta es True, ejecutamos de nuevo el bloque-while, si no continuamos con al ejecución del bloque-else opcional y luego con la siguiente instrucción.

El bloque else es ejecutado cuando la condición del bucle while es falsa – incluso esto puede ser la primer vez que la condición es comprobada. Si hay una clausula else para un bucle while, esta siempre es ejecutada a no ser de que se rompa el bucle con una instrucción break.

True y False son llamados tipos Booleanos y los puede considerar equivalentes a los valores 1 y 0 respectivamente.

Nota para los programadores de C/C++
Recuerden que para los bucles while pueden tener una clausula else.

El Bucle for

La instrucción for..in es otra instrucción de bucle la cual itera sobre una secuencia de objetos, es decir va a través de cada elemento en una secuencia. En capítulos posteriores veremos en detalle mas acerca de las secuencias. Lo que necesita saber por ahora es que una secuencia es solo una colección organizada de elementos.

Ejemplo:

#!/usr/bin/python
# Archivo: for.py

for i in range(1, 5):
    print(i)
else:
    print('El bucle se termino')

Salida:

   $ python for.py
   1
   2
   3
   4
   El bucle se termino

Como funciona:

En este programa, estamos imprimiendo una secuencia de números. Hemos generado esta secuencia utilizando la funcion range que viene incluida con Python.

Lo que hacemos es suministrarle a range dos números y el nos retorna una secuencia empezando en el primero y terminando en el segundo. Por ejemplo, range(1,5) nos da la secuencia [1, 2, 3, 4]. Por defecto range toma un tamaño de paso de 1. Si nosotros le suministramos un tercer número a range, entonces este se vuelve el tamaño de paso. Por ejemplo, range(1,5,2) da [1,3]. Recuerde que el rango llega hasta el segundo número es decir no lo incluye.

Observe que range genera una secuencia de números, pero solo genera uno a la vez, cuando el bucle for lo necesite para el siguiente elemento. Si se quiere ver inmediatamente la secuencia completa de números puede usar list(range()). Listas son explicadas en el capitulo de Estructuras de Datos.

Luego el bucle for itera sobre este rango – for i in range (1,5) es igual a for i in [1, 2, 3, 4] el cual es como asignarle cada numero (o objeto) en la secuencia a i, uno a la vez, y luego ejecutar el bloque de instrucciones para cada valor de i. Para este caso, solo vamos a imprimir el valor.

Recuerde que la sección else es opcional. Cuando esta incluida siempre es ejecutada justo después que se termina el bucle for a no ser que se halla ejecutado una instrucción Break

Tenga presente que el bucle for..in trabaja con cualquier secuencia. Nosotros usamos una lista de números generada por la función range que viene incluida en Python, pero en general se puede usar con secuencias de cualquier tipo de objetos! exploraremos en detalle esta idea en capítulos posteriores.

Nota para programadores de C/C++/Java/C#
El bucle for de Python es totalmente diferente al bucle for de C/C++. Los programadores de C# van a notar que el bucle for de Python es similar al bucle foreach en C#. Los programadores de Java notaran que este es similar a for (int i: IntArray) en Java 1.5.
En C/C++, puede escribir for (int i = 0; i < 5; i++), luego Python solo debe escribir for i in range(0,5) y como puede ver en Python, el bucle for es mas simple, intuitivo y menos propenso a errores.

La Instrucción break

La instrucción break es usada para romper una sentencia de bucle, es decir detiene la ejecución de un bucle inmediatamente, incluso si la condición del bucle no se ha vuelto False o no se ha iterado sobre la secuencia completa de elementos.

Es importante notar que si se rompe un bucle de un for o while, sus correspondientes bloques else no serán ejecutados.

Ejemplo:

#!/usr/bin/python
# Archivo: break.py

while True:
    s = input('Ingrese algo: ')
    if s == 'salir':
        break
    print('La longitud de la cadena es', len(s))
print ('Listo')

Salida:

   $ python break.py
   Ingrese algo: Programar es divertido
   La longitud de la cadena es 22
   Ingrese algo: Cuando el trabajo esta terminado
   La longitud de la cadena es 32
   Ingrese algo: si también lo quieres hacer divertido:
   La longitud de la cadena es 38
   Ingrese algo:     usa Python!
   La longitud de la cadena es 15
   Ingrese algo: salir
   Listo

Como funciona:

En este programa, repetidamente tomamos la entrada del usuario y cada vez imprimimos su longitud. Hemos dado una condición especial para detener el programa cuando la entrada del usuario es 'salir'. Entonces detenemos el programa rompiendo el bucle y alcanzamos el final de este.

La longitud de una cadena de caracteres (string) se puede hallar usando la función len que viene incluida en Python.

Recuerde que la instrucción break también se puede usar en los bucles for.

Python Poético por Swaroop

La entrada usada fue un pequeño poema que he escrito llamado Python Poético por Swaroop

   Programar es divertido
   Cuando el trabajo esta terminado
   si también lo quieres hacer divertido
       usa Python!

Nota del T. La frase real es:
Swaroop’s Poetic Python:

   Programming is fun
   When the work is done
   if you wanna make your work also fun:
       use Python!

La Instrucción continue

La instrucción continue es usada para decirle a Python que salte el resto de las instrucciones en bloque del bucle actual y continué con la siguiente iteración del bucle.

Ejemplo:

#!/usr/bin/python
# Archivo: continue.py

while True:
    s = input('Ingrese algo: ')
    if s == 'salir':
        break
    if len(s) < 3:
        print('Muy pequeño')
        continue
    print('La longitud de la entrada es suficiente')
    # Haga otro tipo de tareas aquí...

Salida:

   $ python continue.py
   Ingrese algo: a
   Muy pequeño
   Ingrese algo: 12
   Muy pequeño
   Ingrese algo: abc
   La longitud de la entrada es suficiente
   Ingrese algo: salir

Como Funciona:

En este programa, vamos aceptar la entrada del usuario, pero solo la procesaremos, si esta es por lo menos de 3 caracteres de longitud. Para obtener la longitud usamos la función len que viene incluida en Python, si esta es menor que 3, saltamos el resto de declaraciones en el bloque usando la instrucción continue. De otra forma, el resto de las declaraciones en el bloque son ejecutadas haciendo cualquier otro tipo de procesamiento que se deba hacer allí.

Note que la instrucción continue funciona también para el bucle for.

Resumen

Ya hemos visto como usar las tres instrucciones de control de flujo – if, while y for acompañas de sus instrucciones asociadas break y continue. Estas son algunas de las partes mas comúnmente usadas en Python y por lo tanto comprenderlas es esencial.

Enseguida, veremos como crear y usar funciones.


Advertisements