CAPÍTULO 4 Control de flujo
Todo programa informático está formado por instrucciones que se ejecutan en forma secuencial de «arriba» a «abajo», de igual manera que leeríamos un libro. Este orden constituye el llamado flujo del programa. Es posible modificar este flujo secuencial para que tome bifurcaciones o repita ciertas instrucciones. Las sentencias que nos permiten hacer estas modificaciones se engloban en el control de flujo.
En esta sección veremos las sentencias if y match-case junto a las distintas variantes que pueden asumir, pero antes de eso introduciremos algunas cuestiones generales de escritura de código.
A diferencia de otros lenguajes que utilizan llaves para definir los bloques de código, cuando Guido Van Rossum creó el lenguaje quiso evitar estos caracteres por considerarlos innecesarios. Es por ello que en Python los bloques de código se definen a través de espacios en blanco, preferiblemente 4. En términos técnicos se habla del tamaño de indentación.
Consejo: Esto puede resultar extraño e incómodo a personas que vienen de otros lenguajes de programación pero desaparece rápido y se siente natural a medida que se escribe código.
Figura 1: Python recomienda 4 espacios en blanco para indentar
Los comentarios son anotaciones que podemos incluir en nuestro programa y que nos permiten aclarar ciertos aspectos del código. Estas indicaciones son ignoradas por el intérprete de Python.
Los comentarios se incluyen usando el símbolo almohadilla # y comprenden hasta el final de la línea.
Los comentarios también pueden aparecer en la misma línea de código, aunque la guía de estilo de Python no aconseja usarlos en demasía:
Reglas para escribir buenos comentarios:
- Los comentarios no deberían duplicar el código.
- Los buenos comentarios no arreglan un código poco claro.
- Si no puedes escribir un comentario claro, puede haber un problema en el código.
- Los comentarios deberían evitar la confusión, no crearla.
- Usa comentarios para explicar código no idiomático.
- Proporciona enlaces a la fuente original del código copiado.
- Incluye enlaces a referencias externas que sean de ayuda.
- Añade comentarios cuando arregles errores.
- Usa comentarios para destacar implementaciones incompletas.
Los programas suelen ser más legibles cuando las líneas no son excesivamente largas. La longitud máxima de línea recomendada por la guía de estilo de Python es de 80 caracteres.
Sin embargo, esto genera una cierta polémica hoy en día, ya que los tamaños de pantalla han aumentado y las resoluciones son mucho mayores que hace años. Así las líneas de más de 80 caracteres se siguen visualizando correctamente. Hay personas que son más estrictas en este límite y otras más flexibles.
En caso de que queramos romper una línea de código demasiado larga, tenemos dos opciones:
1. Usar la barra invertida \:
2. Usar los paréntesis (…):
La sentencia condicional en Python (al igual que en muchos otros lenguajes de programación) es if. En su escritura debemos añadir una expresión de comparación terminando con dos puntos al final de la línea. Veamos un ejemplo:
En el caso anterior se puede ver claramente que la condición se cumple y por tanto se ejecuta la instrucción que tenemos dentro del cuerpo de la condición. Pero podría no ser así. Para controlar ese caso existe la sentencia else. Veamos el mismo ejemplo anterior pero añadiendo esta variante:
Podríamos tener incluso condiciones dentro de condiciones, lo que se viene a llamar técnicamente condiciones anidadas3. Veamos un ejemplo ampliando el caso anterior:
Python nos ofrece una mejora en la escritura de condiciones anidadas cuando aparecen consecutivamente un else y un if. Podemos sustituirlos por la sentencia elif:
Figura 2: Construcción de la sentencia elif
Apliquemos esta mejora al código del ejemplo anterior:
Ejecución paso a paso a través de Python Tutor:
https://cutt.ly/wd58B4t
Cuando escribimos condiciones debemos incluir alguna expresión de comparación. Para usar estas expresiones es fundamental conocer los operadores que nos ofrece Python:
A continuación vamos a ver una serie de ejemplos con expresiones de comparación. Téngase en cuenta que estas expresiones habría que incluirlas dentro de la sentencia condicional en el caso de que quisiéramos tomar una acción concreta:
Podemos escribir condiciones más complejas usando los operadores lógicos:
- and
- or
- not
Véanse las tablas de la verdad para cada operador lógico:
Python ofrece la posibilidad de ver si un valor está entre dos límites de manera directa. Así, por ejemplo, para descubrir si value está entre 4 y 12 haríamos:
Nota:
- Una expresión de comparación siempre devuelve un valor booleano, es decir True o False.
- El uso de paréntesis, en función del caso, puede aclarar la expresión de comparación. [4] [5]
Ejercicio
Dada una variable year con un valor entero, compruebe si dicho año es bisiesto o no lo es.
Un año es bisiesto en el calendario Gregoriano, si es divisible entre 4 y no divisible entre 100, o bien si es divisible entre 400. Puedes hacer la comprobación en esta lista de años bisiestos.
Ejemplo
- Entrada: 2008
- Salida: Es un año bisiesto
«Booleanos» en condiciones
Cuando queremos preguntar por la veracidad de una determinada variable «booleana» en una condición, la primera aproximación que parece razonable es la siguiente:
Pero podemos simplificar esta condición tal que así:
Hemos visto una comparación para un valor «booleano» verdadero (True). En el caso de que la comparación fuera para un valor falso lo haríamos así:
De hecho, si lo pensamos, estamos reproduciendo bastante bien el lenguaje natural:
- Si hace frío, coge chaqueta.
- Si no hace frío, usa camiseta.
Ejercicio
Escriba un programa que permita adivinar un personaje de Marvel en base a las tres preguntas siguientes:
1. ¿Puede volar?
2. ¿Es humano?
3. ¿Tiene máscara?
Ejemplo
- Entrada: can_fly = True, is_human = True y has_mask = True
- Salida: Ironman
Es una especie de Akinator para personajes de Marvel…
Valor nulo
Nivel intermedio
None es un valor especial de Python que almacena el valor nulo4. Veamos cómo se comporta al incorporarlo en condiciones de veracidad:
Para distinguir None de los valores propiamente booleanos, se recomienda el uso del operador is. Veamos un ejemplo en el que tratamos de averiguar si un valor es nulo:
De igual forma, podemos usar esta construcción para el caso contrario. La forma «pitónica» de preguntar si algo no es nulo es la siguiente: