Python (Parte 4) – Sentencias de control de flujo (1)

por | 2 junio, 2016

En los dos próximos artículos os mostraremos como definir y usar herramientas de control de flujo, estas herramientas nos permitirán condicionar el comportamiento de nuestro programa a través de puntos de control, tomar decisiones a partir de validaciones y ejecutar repeticiones o bucles.

Muchas de estas herramientas también son conocidas como «declaraciones compuestas» o «sentencias«, en nuestro caso haremos referencia a ellas usando el término «declaraciones compuestas» pues consideramos que engloba mejor el conjunto . El listado de declaraciones compuestas que explicaremos es el siguiente:

  • if, else, elif
  • for
  • while
  • def
  • try, except, finally

Comienza el show!

1. Sentencia ‘if, else, elif’

Este tipo de declaración es una de las más utilizadas en programación, nos servirá para derivar o decidir el código o acción que debe ser ejecutada a partir de una condición. La programación, en cualquier lenguaje, se basa en llevar a cabo una acción u otra dependiendo de los datos introducidos por el usuario (causa y efecto como decía el francés de Matrix), así pues, recomendamos practicar con distintas combinaciones para entender bien como funciona la sentencia «if«.

Es necesario aclarar que Python organiza el código en bloques, es decir, las líneas de código deben estar alineadas cuando tratamos con sentencias «if» y semejantes para que Python sepa que ese código es parte de su contenido. En otros lenguajes se suele agrupar el código o contenido con sintaxis que usan sentencias block { }, no obstante, en Python el delimitador de contenido sería la alineación misma del código en lugar de dicho carácter especial.

Ejemplo JavaScript:

if (condición) {
    bloque de código a ser ejecutado si se cumple la condición
}

Ejemplo Python:

if condición

bloque de código a ser ejecutado si se cumple la condición

En la siguiente imagen mostraremos la organización en bloques de un modo algo más visual:

Bloques3

A continuación os mostraremos varios ejemplos e incrementaremos su complejidad poco a poco, en estos ejemplos plantearemos la situación o condición  y a continuación su interpretación en Python.

  • Ejemplo 1:

Requisito en texto: Si la variable «Edad» es mayor que 18 mostrar el mensaje de texto «Eres mayor de edad«, en caso contrario no mostrar nada.

Python:

Edad = 19

if Edad >= 18:

print (‘Eres mayor de edad’)

Nota: Recordad aplicar una tabulación en las líneas de código tras la sentencia «if» para mantener todo el bloque alineado y dentro de dicha sentencia, así mismo, recordad pulsar dos veces la tecla «Intro» para que sea ejecutado el código.

  • Ejemplo 2:

Requisito en texto: Reutilizar el ejemplo anterior para que muestre el mensaje «Eres menor de edad» en caso de que la variable «Edad» sea menor de 18.

Python:

Edad = 15

if Edad >= 18:

print (‘Eres mayor de edad’)

else:

print (‘Eres menor de edad’)

Nota: En este ejemplo hemos hecho uso de la sentencia «else«. La sentencia «else» es usada en combinación con «if» y su función es ejecutar el bloque de código que se encuentra en su interior únicamente en caso de no cumplirse la condición del bloque «if«.

  • Ejemplo 3:

Requisito en texto: Imaginemos que estamos en un cine para una película de acción y el requisito es ser mayor de edad y tener comprada una entrada, en este caso necesitaremos incluir una nueva variable de tipo booleano en la condición llamada «TieneEntrada» y su posible valor será True o False.

Python:

Edad = 18

TieneEntrada = True

if Edad >= 18 and TieneEntrada == True:

print (‘Eres mayor de edad, tienes entrada y puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: En este ejemplo hemos unido las condiciones en una única línea, no obstante, eso limitará la variedad de mensajes que podremos mostrar.

  • Ejemplo 4:

Requisito en texto: Reutilizar el código del ejemplo anterior pero mostrando cuatro mensajes distintos dependientes de la edad y de si tienes entrada.

Python:

Edad = 21

TieneEntrada = True

if Edad >= 18:

print (‘Eres mayor de edad’)

if TieneEntrada == True:

print (‘Tienes y entrada y puedes ver la película’)

else:

print(‘Sin entrada no puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: Este ejemplo sería más completo pero no tan limpio como nos gustaría, es decir, en caso de ser mayor de 18 años sería mostrado el mensaje «Eres mayor de edad» e inmediatamente después otro mensaje indicando si tenemos o no entrada. En una situación algo más real intentaríamos reducir la cantidad de mensajes como se muestra en el siguiente ejemplo.

  • Ejemplo 5:

Requisito en texto: Aplicar las mismas validaciones del ejemplo anterior pero unificando los mensajes a solo tres.

Python:

Edad = 21

TieneEntrada = True

if Edad >= 18 and TieneEntrada == True:

print (‘Eres mayor de edad, tienes entrada y puedes ver la película’)

elif Edad >= 18 and TieneEntrada == False:

print (‘Eres mayor de edad pero sin entrada no puedes ver la película’)

else:

print (‘Eres menor de edad y no puedes ver la película’)

Nota: En este caso se ejecutará la condición del primer «if» y si se cumple se mostrará el primer mensaje. En caso de no cumplirse la primera condición, la sentencia «elif» volverá a validar los datos con otra condición y mostrará el segundo mensaje si esta se cumple. En última instancia, si ninguna de las validaciones anteriores se cumple, será mostrado el tercer mensaje correspondiente a la sección «else«.

  • Ejemplo 6:

Requisito en texto: Un punto a tener presente en sentencias «if, elif, else» es asegurarnos de que el tipo de dato que estamos comparando sea correcto, es decir, comparar por ejemplo textos con números podrían provocar un comportamiento inesperado.

Python:

Edad = «21»

if Edad >= 18:

print(‘Eres mayor de edad’)

Nota: Al comparar un dato de texto «21» con un dato numérico 18 recibiremos un mensaje de error.

  • Ejemplo 7:

Requisito en texto: Aplicaremos al ejemplo anterior una conversión de texto a número mediante la función «int()» para que la comparación sea correcta.

Python:

Edad = «21»

if int(Edad) >= 18:

print(‘Eres mayor de edad’)

2. Sentencia ‘for’

La sentencia «for» es usada para llevar a cabo iteraciones o repeticiones, es decir, repetirá un bloque de código tantas veces como indiquemos al declararlo. El ejemplo más sencillo sería el siguiente:

for x in range(0,5):

print x

for1

Es posible que nos confunda el resultado 0,1,2,3,4 y no ver un número 5 cuando lo hemos definido en la sentencia «for» a través del parámetro «range(0,5)«, la explicación es que recorrerá los números existentes del 0 al 5 sin incluir este último, es decir, todos los valores menores de 5 partiendo del valor 0.

No es obligatorio establecer un rango fijo de repeticiones, es decir, podremos sustituir los valores de entrada del parámetro «range()» por variables previamente definidas:

Minimo = 0

Maximo = 11

for x in range(Minimo, Maximo):

print («El valor que toma x es %s» % x)

En caso de desear recorrer un rango en sentido inverso, es decir, una especie de cuenta atrás, invertiremos los valores de inicio, fin y agregaremos un tercer parámetro a la función «range()» con el valor «-1«:

for x in range(11,0,-1):

print (x)for2

 

Existe la posibilidad de establecer el rango de repeticiones sin necesidad del parámetro «range()«, un ejemplo sería a través de una variable de tipo lista que ejecutará tantas iteraciones como valores hay en dicha lista:

NuestraLista = [‘Perro’, ‘Pato’, ‘Elefante’]

for x in NuestraLista:

print(x)

3. Sentencia ‘while’

La sentencia «while» es usada para llevar a cabo iteraciones o repeticiones tantas veces como se defina en una expresión, es decir, repetirá un bloque de código hasta que se cumplan las condiciones establecidas dentro de la propia sentencia «while». El método de control más común es declarar una variable, que usaremos como contador, con valor por defecto cero antes del bucle «while», usar dicho contador en la condición del «while» e incrementar su valor sumando de uno en uno dentro del bloque de código.

Contador = 0

while Contador < 10:

print(Contador)

Contador = Contador + 1

Al contrario que la sentencia «for«, la sentencia «while» no es ejecutada un número finito de veces previamente definido, así pues, debemos tener mucho cuidado al usar este tipo de sentencia y su condición de salida pues podríamos definir por error un bucle infinito que colgaría nuestro código, programa o aplicación.

A continuación os mostraremos varios ejemplos e incrementaremos su complejidad poco a poco, en estos ejemplos plantearemos la situación o condición  y a continuación su interpretación en Python.

  • Ejemplo 1:

Requisito en texto: Definir dos variables «a» y «b» con valores por defecto «1» y «10» respectivamente. Incrementar en uno el valor de la variable «a» e imprimir su valor en ese instante mientras dicha variable sea menor que «b«.

Python:

a = 1

b = 10

while a < b:

print(a)

a = a + 1

Nota: Un error muy común en estos casos sería no definir una suma incremental sobre el valor de la variable «a» como el que hemos usado en nuestro código de ejemplo (a = a + 1), en caso de no definirlo la condición nunca se cumpliría y por tanto el código imprimiría por pantalla el número «1» infinitas veces. Recomendamos hacer una prueba pues como siempre decimos «una imagen vale más que mil palabras aunque pesa más en el disco duro».

  • Ejemplo 2:

Requisito en texto: Deseamos saber cuantos hay desde hoy día 10 hasta el día 30 del mes, para saber cuando cobraremos :P, e informar con un mensaje el total de días.

Python:

DiaDelMes = 10

FinDeMes = 30

NumeroDeDias = 0

while DiaDelMes <= FinDeMes:

DiaDelMes = DiaDelMes + 1

NumeroDeDias = NumeroDeDias + 1

if DiaDelMes == FinDeMes:

print (‘Faltan %s días para cobrar’ % NumeroDeDias)

  • Ejemplo 3:

Requisito en texto: Deseamos saber si el día de hoy está más cerca del principio de mes o del fin de mes y saber únicamente el más cercano.

Python:

DiaDelMes = 18

DiaInicioMes = 1

DiaFinDeMes = 31

Contador1 = DiaDelMes

Contador2 = DiaDelMes

while Contador1 > DiaInicioMes and Contador2 < DiaFinDeMes:

Contador1 = Contador1 – 1

Contador2 = Contador2 + 1

if Contador1 == DiaInicioMes and Contador2 == DiaFinDeMes:

print (‘Existe la misma diferencia entre el día de hoy y principios o finales de mes’)

elif Contador2 == DiaFinDeMes:

print (‘El día de hoy es más cercano al final del mes’)

else:

print (‘El día de hoy es más cercano al principio de mes’)

Nota: Ojo! la sentencia «if» está alineada con la sentencia «while» y por tanto fuera de esta, es decir, se ejecutará una única vez al terminar el «while«. Este ejemplo sabemos que es algo obvio si únicamente tratamos un mes, no obstante, a futuro usando datos de fechas reales entre distintos meses podría servirnos de ayuda. 

Para no extendernos en exceso en un único artículo, descansar un poco los dedos de tanto escribir y dar también descanso a vuestras fatigadas mentes, dividiremos este artículo en dos entregas que encontraréis en la misma categoría dedicada a Python.

Listado de artículos relacionados:

Artículo 1: Introducción
Artículo 2: Operadores
Artículo 3: Variables
Artículo 4: Tipos de datos
Artículo 5: Sentencias de Control (1)
Artículo 6: Sentencias de Control (2)

logo_sexy

Comparte esta página! Email this to someone
email
Share on Facebook
Facebook
0Tweet about this on Twitter
Twitter
Share on LinkedIn
Linkedin

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.