if ... elif ... else ...En esta lección se tratan los tipos booleanos y la estructura de control if ... elif ... else ...:
Una variable booleana es una variable que sólo puede tomar dos posibles valores: True (verdadero) o False (falso).
Unas operaciones (entre otras) que dan como resultado valores booleanos son las comparaciones:
>>> 3 > 2
True
>>> 3 < 2
False
>>> 2 >= 1 + 1
True
>>> 4 - 2 <= 1
False
>>> 2 == 1 + 1
True
>>> 6 / 2 != 3
False
Es importante señalar que en matemáticas el signo igual se utiliza tanto en las asignaciones como en las comparaciones, mientras que en Python:
Cuando se aprende a programar es habitual confundir una cosa con la otra, por lo que se recomienda prestar atención a este detalle.
Se pueden encadenar varias comparaciones y el resultado será verdadero si y sólo si todas las comparaciones lo son.
>>> 4 == 3 + 1 > 2
True
>>> 2 != 1 + 1 > 0
False
En Python, cualquier variable puede considerarse como un booleano. El cero, las cadenas vacías, las listas vacías y otros tipos de elementos cuando están vacíos se consideran False, mientras que el resto de valores se consideran True. Se puede comprobar con la función bool() que convierte el argumento al valor booleano correspondiente:
>>> bool(5)
True
>>> bool('')
False
>>> bool("Esto es una prueba")
True
Los llamados operadores lógicos son unas operaciones que trabajan con valores booleanos.
>>> True and False
False
>>> 3 > 2 and 1 + 1 == 2
True
>>> True and False
True
>>> 3 < 2 or 1 + 1 != 2
False
>>> not(True)
False
>>> not(4 == 5)
True
Al escribir expresiones más complejas se recomienda utilizar paréntesis para evitar ambigüedades.
>>> False and True or True
False
>>> (False and True) or True
True
>>> False and (True or True)
False
Si en las expresiones lógicas se utilizan valores, el resultado utiliza esos valores en vez de True o False, aunque se puede convertir el resultado a un valor booleano:
>>> 3 or 4 # Verdadero porque 3 y 4 son diferentes de 0 y se tratan como True
3
>>> bool(3 or 4)
True
Volver al principio de la página
A menudo es necesario que un programa ejecute unas instrucciones cuando se cumplan unas condiciones y otras cuando no. En esos casos se utiliza la estructura de control if ... else ..... En inglés "if" significa "si" (condición) y "else" significa "si no". La orden en Pyhton se escribe así:
if condición: aquí van las órdenes que se ejecutan si la condición es cierta y que pueden ocupar varias líneas else: y aquí van las órdenes que se ejecutan si la condición es falsa y que también pueden ocupar varias líneas
La primera línea contiene la condición a evaluar. Esta línea debe terminar siempre por dos puntos (:).
A continuación viene el bloque de órdenes que se ejecutan cuando la condición se cumple (es decir, cuando la condición es verdadera). Es importante señalar que este bloque debe ir indentado, puesto que Python utiliza el indentado para reconocer las líneas que forman un bloque de instrucciones. El indentado que se suele utilizar en Python es de cuatro espacios, pero se pueden utilizar más o menos espacios. Al escribir dos puntos (:) al final de una línea, IDLE indentará automáticamente las líneas siguientes. Para terminar un bloque, basta con volver al principio de la línea.
Después viene una línea con la orden else (opcional), que indica a Python que el bloque que viene a continuación se tiene que ejecutar cuando la condición no se cumpla (es decir, cuando sea falsa). Esta línea también debe terminar siempre por dos puntos (:).
En último lugar está el bloque de instrucciones indentado que corresponde al else.
Vamos a ver un ejemplo:
# -*- coding: cp1252 -*-
edad = int(raw_input('¿Cuántos años tiene? ')) if edad < 18: print 'Es usted menor de edad' else: print 'Es usted mayor de edad' print '¡Hasta la próxima!'
Este programa pregunta cuántos años tiene y almacena la respuesta en la variable "edad". Después comprueba si la edad es inferior a 18 años. Si esta comparación es cierta, el programa escribe que es menor de edad y si es falsa escribe que es mayor de edad. Finalmente el programa siempre se despide, ya que la última instrucción está fuera de cualquier bloque y por tanto se ejecuta siempre.
El bloque else puede omitirse, como muestra el siguiente ejemplo.
# -*- coding: cp1252 -*-
numero = int(raw_input('Escriba un número positivo: '))
if numero < 0:
print '¡Le he dicho que escriba un número positivo!'
print 'Ha escrito el número', numero
En este caso, si el número escrito por el usuario es negativo, se muestra un mensaje, pero si es positivo no se muestra ese mensaje. En ambos casos se escribe el mensaje final.
El bloque if no puede omitirse porque contiene la comparación, pero si por algún motivo no se quisiera ejecutar ninguna orden, el bloque de órdenes del if debe contener al menos la orden pass (esta orden le dice a Python que no tiene que hacer nada).
# -*- coding: cp1252 -*-
edad = int(raw_input('¿Cuántos años tiene? ')) if edad < 120: pass else: print '¡Mentiroso!' print 'Usted dice que tiene', edad, 'años.'
Evidentemente este programa podría simplificarse cambiando la desigualdad. Es sólo un ejemplo para mostrar cómo se utiliza la orden pass.
# -*- coding: cp1252 -*-
edad = int(raw_input('¿Cuántos años tiene? ')) if edad >= 120: print '¡Mentiroso!' print 'Usted dice que tiene', edad, 'años.'
Volver al principio de la página
A menudo, es necesario plantear más de dos alternativas. En ese caso se puede utilizar la orden elif.
if condición_1: bloque 1 elif condición_2: bloque 2 else: bloque 3
Se pueden escribir tantos elif como sean necesarios. El bloque else (que es opcional) se ejecuta si no se cumple ninguna de las condiciones anteriores:
Vamos a ver un ejemplo:
# -*- coding: cp1252 -*-
edad = int(raw_input('¿Cuántos años tiene? ')) if edad < 0: print '¿Todavía no ha nacido?' elif edad < 16: print 'Legalmente todavía no puede trabajar' elif edad < 65: print 'A esa edad, puede trabajar' elif edad < 120: print 'Supongo que ya estará jubilado/a' else: print '¿Seguro que tiene', edad, 'años?'
El orden en que aparecen las distintas comparaciones es muy importante, pues cuando se cumple una de las comparaciones, Python ya no considera las siguientes condiciones, aunque se cumplan. En general, se deben escribir primero los casos particulares y después los casos generales.
Si en el programa anterior las comparaciones se fueran haciendo en el orden inverso, el programa no funcionaría como se espera, puesto que cualquier valor inferior a 120 mostraría el mensaje 'Supongo que ya estará jubilado/a'.
# -*- coding: cp1252 -*-
edad = int(raw_input('¿Cuántos años tiene? ')) if edad < 120: print 'Supongo que ya estará jubilado/a' elif edad < 65: print 'A esta edad, puede trabajar' elif edad < 16: print 'Legalmente todavía no puede trabajar' elif edad < 0: print '¿Todavía no ha nacido?' else: print '¿Seguro que tiene', edad, 'años?'
En general, cuando unos casos están incluidos en otros, es conveniente ordenar los casos del más particular al más general.
Volver al principio de la página
Esta página forma parte del curso "Introducción a la programación con Python" disponible en http://www.mclibre.org
Esta obra está bajo una licencia de Creative
Commons.