lunes, 13 de octubre de 2014

Python (02) Estructuras de control de flujo

Vamos a ver como funcionan las estructuras de control de flujo, las cuales son muy sencillas, de hecho algún lector podrá pensar que están incompletas, pero la realidad es que funcionan de forma correcta. Como ya he dicho en anteriores entradas, no pretendo escribir un manual completo de Python, si no más bien una referencia, por lo que en los ejemplos veremos también algunas cosas adicionales que nos harán ir comprendiendo el funcionamiento de este lenguaje.

if, elif, else

Estas tres instrucciones van cogidas de la mano, de hecho cualquier persona que provenga de java, php... podría creer que elif esta mal escrito pero python contrae else if en elif.
De hecho elif sustituye a los switch en python y se crean con esta instrucción como veremos un poco más adelante.
Veamos un ejemplo:
x=int(input("Diga su edad por favor: "))
if x<0:
    print('No se puede tener edad negativa')
elif x<18:
    print('es usted menor de edad')
else:
    print('es usted mayor de edad')

Al analizar este pequeño script ya en la primera línea vemos como se declara una variable x de tipo entero y con un input, esto viene a decir que se espera una entrada de información por parte del usuario de tipo numérico, si se introduce cualquier otro tipo de información como una cadena, nos saltará un error.

A continuación vemos como funciona el if con la condición directamente puesta, no utiliza paréntesis como en otros lenguajes y después los dos puntos : que indican que comienza el código a ejecutar si se cumple la condición.
Hay que tener en cuenta, como ya apunté, que en python no se utilizan las llaves para los ámbitos, por lo que se debe de indexar correctamente para no cometer errores. (esto es uno de los factores que pueden ser perjudiciales en este lenguaje, ya que un error en la indexación puede acabar con un largo periodo de depuración)

Cuando nos encontramos con el elif vemos que funciona exactamente igual  que el if, considerando que si no se cumplen las condiciones anteriores se compare con la actual...

El else como siempre, funciona cuando no se cumplen el resto de condiciones, pero en python,  puede hacer las veces de un try para capturar excepciones en los bucles...

While

La instrucción while es muy interesante a la hora de realizar bucles, ya que su funcionamiento nos permite poner condiciones al cumplimiento del bucle como vemos a continuación:
opcion = 1
while opcion != 0:
    print('############## MENÚ ###########')
    print('1. Calcular números primos')
    print('2. Serie de Fibonacci')
    print('0. Salir')
    opcion = int(input('introduzca un valor: '))
    if opcion == 1:
        print('primos()')
    elif opcion == 2:
        print('fib()')
    elif opcion == 0:
        exit

Lo primero que observamos es la declaración de la variable opción con el valor 1, para que cumpla la condición que imponemos al while, y es que se ejecute siempre y cuando opción sea diferente de 0.

Entramos en el código del while donde hemos creado un menú (las opciones deberían ser llamadas a funciones, que veremos proximamente, pero de momento las he dejado con un print.) al elegir alguna de las opciones el programa busca por los if y elif si se cumple la opción para ejecutar el código correspondiente, y de lo contrario se vuelve a ejecutar el bucle while.

Cuando el valor de opción es cero, he optado por introducir un exit, que sale del programa, pero no tiene por que ser así ya que al pulsar sobre cero se saldría del bucle y continuaría ejecutando el código.


for

Sin lugar a dudas es uno de los tipos de bucles más utilizados, sirve para multitud de cosas, recorrer matrices, contadores, recoger datos...
Aunque a veces y para entender mejor el funcionamiento de los for, necesitaremos utilizar la función range().

la funcion range()

Se utiliza para iterar sobre una secuencia de números (quizas lo mas extraño que he visto hasta el momento en este lenguaje).
range() puede tener en su interior hasta tres valores:
  • range(x) hace una iteración desde 0 hasta x-1
  • range (y, x) hace una iteración desde y hasta x-1
  • range (y, x, z) hace una iteración desde y hasta x-1 saltando de z en z
También puede tener como argumento la función len(), sobre todo para cuando estamos recorriendo matrices.

ejemplos de for

Ahora que sabemos algo sobre como funciona range() podemos empezar a ver como hacer nuestros bucles for de forma sencilla. Naturalmente habrá muchos más ejemplos y posibilidades, pero creo que con los que mostraré a continuación podrás hacerte una idea de su uso.
palabras = ['uno', 'dos', 'tres', 'cuatro']
for i in range(len(palabras)):
    print (palabras [i])

En este ejemplo vemos como se declara un array y como se va a recorrer mostrandolo por consola con el siguiente resultado:
uno
dos
tres
cuatro


for i in range(1,10):
    muestra = i*'X'
    print (muestra)

En este ejemplo vemos como funciona la función range() desde el 1 hasta el 9 y como se va dibujando un triángulo de X
X
XX
XXX
XXXX
XXXXX
XXXXXX
XXXXXXX
XXXXXXXX
XXXXXXXXX



for i in range(10,1,-1):
    muestra = i*'X'
    print (muestra)

En este caso la función range() va desde el 10 al 1 restando uno por cada ciclo y dibujando un triángulo de X invertido.
XXXXXXXXXX
XXXXXXXXX
XXXXXXXX
XXXXXXX
XXXXXX
XXXXX
XXXX
XXX
XX


Comparaciones

Las condiciones utilizadas en while e if pueden contener diversos operadores, no solo comparaciones:
  • in y not in: verifican si un valor se encuentra i no en la secuencia
  • is y not is: comparan si un objeto es el mismo que otro, utilizado generalmente para comparar objetos mutables
  • Las comparciones pueden encadenarse, y tambien combinarse mediante operadores and y or, negandose las comparaciones con not.

No hay comentarios:

Publicar un comentario