Ver índice de contenidos del libro

4.3. Múltiples decisiones consecutivas

La decisión de incluir una alternativa en un programa, parte de una lectura cuidadosa de la especificación. En nuestro caso la especificación nos decía:

Si el número es positivo escribir un mensaje "Numero positivo", de lo contrario escribir un mensaje "Numero no positivo".

Veamos qué se puede hacer cuando se presentan tres o más alternativas:

Problema 4.3. Si el número es positivo escribir un mensaje "Numero positivo", si el número es igual a 0 un mensaje "Igual a 0", y si el número es negativo escribir un mensaje "Numero negativo".

Una posibilidad es considerar que se trata de una estructura con dos casos como antes, sólo que el segundo caso es complejo (es nuevamente una alternativa):

  1. Solicitar al usuario un número, guardarlo en x.
  2. Si x > 0, imprimir "Numero positivo".
  3. De lo contrario:
    • Si x = 0, imprimir "Igual a 0"
    • De lo contrario, imprimir "Numero no positivo"

Este diseño se implementa como:

def pcn1():
    x = input("Ingrese un numero: ")
    if x > 0:
        print "Numero positivo"
    else:
        if x == 0:
            print "Igual a 0"
        else:
            print "Numero negativo"

Esta estructura se conoce como de alternativas anidadas ya que dentro de una de las ramas de la alternativa (en este caso la rama del else) se anida otra alternativa.

Pero ésta no es la única forma de implementarlo. Existe otra construcción, equivalente a la anterior pero que no exige sangrías cada vez mayores en el texto. Se trata de la estructura de alternativas encadenadas, que tiene la forma:

if <condición_1>:
    <hacer algo_1 si se da la condición_1>
elif <condición_2>:
    <hacer algo_2 si se da la condición_2>
 
...
 
elif <condición_n>:
    <hacer algo_n si se da la condición_n>
else:
    <hacer otra cosa si no se da ninguna de las condiciones anteriores>

Donde if, elif y else son palabras reservadas. En nuestro ejemplo:

def pcn2():
    x = input("Ingrese un numero: ")
    if x > 0:
        print "Numero positivo"
    elif x == 0:
        print "Igual a 0"
    else:
        print "Numero negativo"

Se evalúa la primera alternativa, si es verdadera se ejecuta su cuerpo. De lo contrario se evalúa la segunda alternativa, si es verdadera se ejecuta su cuerpo, etc. Finalmente, si todas las alternativas anteriores fallaron, se ejecuta el cuerpo del else.

Nota No sólo mediante los operadores vistos (como > o =) es posible obtener expresiones booleanas. En Python, se consideran verdaderos los valores numéricos distintos de 0, las cadenas de caracteres que no son vacías, y en general cualquier valor que no sea 0 o vacío. Mientras que los valores 0 o vacíos se consideran falsos.

Así, el ejemplo anterior también podría escribirse de la siguiente manera:

def pcn2():
    x = input("Ingrese un numero: ")
    if x > 0:
        print "Numero positivo"
    elif not x:
        print "Igual a 0"
    else:
        print "Numero negativo"

Copyright (c) 2011-2014 Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos Medrano, Nicolás Paez. La copia y redistribución de esta página se permite bajo los términos de la licencia Creative Commons Atribución - Compartir Obras Derivadas Igual 3.0 siempre que se conserve esta nota de copyright.