Condicionales encadenadas y anidadas
Condicionales encadenados
Algunas veces hay más de dos posibilidades, de manera que necesitamos más de dos ramas. Una forma de expresar una operación así es usar un condicional encadenado:
if x < y :
print ('menor')
elif x > y:
print ('mayor')
else:
print('igual')
elif es una abreviatura de else if. En este caso también se ejecutará únicamente una de las ramas.
No hay límite para el número de sentencias elif. Si hay una cláusula else, debe ir al final, pero tampoco es obligatorio que exista.
if respuesta == 'a':
print('Respuesta incorrecta')
elif respuesta == 'b':
print('Respuesta correcta')
elif respuesta == 'c':
print('Casi, pero no es correcto')
Cada condición se comprueba en orden. Si la primera es falsa, se comprueba la siguiente y así sucesivamente. Si una de ellas es verdadera, se ejecuta la rama correspondiente, y la sentencia termina. Incluso si hay más de una condición que es verdadera, solo se ejecuta la primera que se encuentra.
Condicionales anidados
Un condicional también puede estar anidado dentro de otro. Podríamos escribir el ejemplo del apartado anterior de esta manera:
if x == y:
print('x y y son iguales')
else:
if x < y:
print('x es menor que y')
else:
print('x es mayor que y')
El condicional exterior tiene dos ramas. La primera ejecuta una sentencia simple. La segunda contiene otra sentencia if, que a su vez tiene sus propias dos ramas. Esas dos ramas son ambas sentencias simples, pero podrían haber sido sentencias condicionales también.
A pesar de que la tabulación de las sentencias hace que la estructura esté clara, los condicionales anidados pueden volverse difíciles de leer rápidamente. En general, es buena idea evitarlos si se puede.
Los operadores lógicos a menudo proporcionan un modo de simplificar las sentencias condicionales anidadas. Por ejemplo, el código siguiente puede ser escrito usando un único condicional.
if 0 < x:
if x < 10:
print('x es un número positivo con un solo dígito.')
La sentencia print se ejecuta solamente si se cumplen las dos condiciones anteriores, así que en realidad podemos conseguir el mismo efecto con el operador and:
if 0 < x and x < 10:
print('x es un número positivo con un solo dígito.')