Python – Capítulo 6: En caso contrario

Objetivo: presentar la claúsula ELSE en Python, complemento de IF para el caso en que no se cumpla la condición.

El otro día tuvimos ocasión de conocer la estructura if, que nos permitía reconducir el rumbo de ejecución de un programa en función del cumplimiento o no de una determinada condición.

Recordemos el programa anterior:


nombre = input('Introduce tu nombre de pila: ')
if nombre == 'Javier':
    print('Hola, tocayo')
apellido = input('Introduce tu apellido: ')
print(nombre, apellido)

En el supuesto de que el nombre introducido fuera Javier, se ejecutaba la función print indentada, mostrándonos el mensaje Hola, tocayo.

Pero, ¿y si deseamos que el programa realice algo en caso contrario, es decir, si la condición no se cumple?

La claúsula else (que podemos traducir como en caso contrario) sirve para este propósito.

Modifiquemos el programa anterior para que, si el nombre no coincide, nos muestre un mensaje reflejándolo.


nombre = input('Introduce tu nombre de pila: ')
if nombre == 'Javier':
    print('Hola, tocayo')
else:
    print('No, no te llamas como yo')
apellido = input('Introduce tu apellido: ')
print(nombre, apellido)

Aprecia los dos puntos después de la palabra else. Al igual que después de la condición del if, es un error común olvidarlos.

Observa también la indentación en el print después del else. Recuerda que esa indentación es la que indicará el comienzo y el fin del bloque de instrucciones a ejecutar. En este ejemplo, se ha tratado de una única instrucción; si hubiese sido preciso ejecutar varias, simplemente las colocaríamos debajo con el mismo nivel de sangrado.

Ten presente, a la hora de indentar, que los tabuladores son diferentes de los espacios, aunque en la práctica aparenten la misma separación. Sé siempre coherente y elige uno u otro, pero no los mezcles.

Ilustremos la estructura if… else con un nuevo ejemplo con el que presentaremos, además, otros aspectos del lenguaje de programación Python.


# coding=latin-1
dato = input('Introduce un número entero: ')
if int(dato) % 2 == 0:
    print('El número introducido es par')
    print('La mitad es', int(dato)//2, ', exactamente')
else:
    print('El número introducido es impar')

Este programa nos instará a introducir un número y nos dirá si es par o impar. En el primer caso, calculará, además, su mitad.

El comentario en la primera línea tiene un significado especial:

# coding=latin-1

He tenido que incluirlo para que el intérprete reconociera los acentos propios de nuestro idioma. En determinados entornos (como IDLE, que presentaremos más adelante) esto no es necesario, pero en la máquina Windows que he empleado para redactar este artículo la codificación no era la adecuada.

Fijémonos en el comienzo de la estructura if:

if int(dato) % 2 == 0:

La variable dato, recogida a través de input, es del tipo string, es decir, una cadena de caracteres. Para poder realizar operaciones aritméticas con ella es preciso convertir su valor a una cifra numérica. La función int() se ocupa de este cometido, devolviendo un valor entero.

El programa, tal como está escrito, no realiza ningún tipo de comprobación de errores a la hora de introducir el valor y espera nuestra cooperación. Si en vez de introducir un número facilitamos una cadena de caracteres, el programa devolverá un error justo en la línea en la que trata de convertirla a número entero.

El operador % nos da el resto de la división entera (también conocido como operador módulo). Si el resto de la división por dos es cero, sabremos que el número es par y se ejecutarán los dos print que aparecen a continuación. Fíjate cómo la indentación muestra perfectamente el comienzo y el final del bloque. En la segunda de las instrucciones el programa calculará la mitad del valor introducido y nos la mostrará.

Observa con detalle la expresión:

int(dato)//2

El doble signo de división significa división entera y nos devolverá únicamente la parte entera de la división (el cociente).

En caso contrario, si el resto de la división no es cero el programa nos mostrará un mensaje en pantalla indicándonos que el número introducido es impar.

Espero que hayas comprendido la lógica de la estructura if … else. En la próxima entrega le daremos una nueva vuelta de tuerca.

Javier Montero Gabarró


Fecha de la última revisión: 9 de agosto de 2012


Python – Capítulo 6: En caso contrario


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

11 opiniones en “Python – Capítulo 6: En caso contrario”

  1. Si para que el resultado de dividir dos números sea enteros, utilizó el operador ‘//’; Entonces para que sean decimales es ‘/’, claro que el dato ya no será ‘int’, si no ‘float’.
    Si dividimos dos números con el operador ‘//’ y cuyo resultado es un valor con decimales, ¿Este sale entero? y que pasa con los decimales, como se podrían redondearlos? E.g. 3.5 a 4
    Esto sirve mucho, por ejemplo cuando hablamos de la nota de un alumno.
    Saludos.

  2. Hola, una pregunta a colación de «# coding=latin-1» (ó: «#-*- coding: UTF-8 -*-«)
    ¿Cómo imprimir desde el programa la codificación del programa? ¿existe algún comando que indique si coding está declarado y con qué valor (UTF-8, latin-1, ISO-……?

    gracias..

    1. Qué tal:
      No hay modo directo, pero siempre puedes escribir meta-código que lea el fichero fuente en busca del comentario mágico. Aún así, ni su ausencia ni su presencia podrás responder con fiabilidad absoluta a tu pregunta.
      Saludos

  3. y otra petición: si vas a hacer un artículo sobre funciones matemáticas, trata por favor el redondeo par (que no existe en python)

  4. en efecto, he comprobado que en python3000 así es,
    pero en python2.7 no lo es, y haría falta una función, que no encuentro…. por ningun lado…

    aprovechando ya el tema (soy un novato),
    siempre me digo que las incompatibilidades entre python 2 y 3
    son un problema gordo…
    y no entiendo como no se soluciona….
    [sé que lo que viene a continuación tiene muchos fallos, pero es que entiendo que debería haber mayores esfuerzos en unificar las versiones de python, o bien declarar para que version se ha codificado, o que cambien directamente de nombre]:

    -> otra cosa que no entiendo es porqué no unifican python 2.7 y 3000… podrían empezar con cosas así:
    – que acepte como iguales input y raw_input
    – para que python2 entienda ‘/’ no como division entera sino como lo entiende python3,
    crear una sentencia: div que signifique division flotante..jeje
    ¿y cómo saber si el fuente es para python2 o para python3?, eso le toca a los nuevos programas
    escritos en python3 que estaran obligados a declararlo igual que se hace con coding:
    # -*- version_python: 3 -*-

    así puede pasar:
    python 2.7 se encuentra un fuente de python3:
    llama a python3 si existe
    y si no sale y avisa de que lo instales, y que no coinciden las versiones
    python 2.7 se encuentra un fuente de python2:
    convierte los ‘/’ a ‘//’
    convierte input a input_raw
    se ejecuta

    python 3 se encuentra fuente de python3:
    pass

    python 3 se encuentra fuente de python 2.7:
    convierte los ‘/’ a ‘//’
    convierte ‘div’ a ‘/’
    convierte input_raw a input
    convierte los print sin parentesis a print con parentesis
    se ejecuta

    para los ficheros con extension .py (que no sean .pyc), el pequeño incremento de tiempo
    que python emplearia para hacer internamente la conversion, no supondria un problema,,,
    – habría cosas más complicadas para la compatibilidad, pero con éstas creo que se cubre un gran porcentaje de las incompatibilidades..

    1. La coexistencia de dos versiones es uno de los episodios oscuros de Python, necesario aún porque hay muchísimo código escrito para Python 2 dependiente de librerías importantes que aún no han sido migradas a Python 3. Es un proceso lento, pero afortunadamente cada vez son menos.
      El lenguaje, a su vez, poco a poco va convergiendo, y esperemos que de una vez por todas desaparezca ya la versión 2.
      Puedes solucionar tu problema usando la función round de Python 3 desde Python 2. Para ello tendrás que instalar en primer lugar el paquete future (usa pip, que ya viene incluido desde 2.7.9).
      Una vez instalado, puedes empezar a utilizar las características de Python 3 desde Python 2. Por ejemplo, en el caso de que sólo quieras solucionar la cuestión del redondeo:

      
      Python 2.7.10 (default, May 23 2015, 09:40:32) [MSC v.1500 32 bit (Intel)] on win32
      Type "copyright", "credits" or "license()" for more information.
      >>> from builtins import round
      >>> round(3.5)
      4
      >>> round(4.5)
      4

      Escribiré, cuando tenga ocasión, un artículo detallando la funcionalidad del paquete future.

      Saludos

      1. y sin querer pesado.. ¿se sabe qué librerías faltan para completar esa transición a python3? ¿qué porcentaje de librerías están portadas?

        1. Estamos saliéndonos de la temática del artículo; quizás deba preparar una nueva entrada dedicada a esto donde se pueda debatir ampliamente…
          Tómatelo con calma, vas a tener Python 2 aún por algunos años. Python 2.8 no verá la luz y la versión 2 desaparecerá gradualmente.
          Las librerías gordas ya han sido migradas en su mayoría. Aún así, hay cierta falta de motivación por muchos desarrolladores para portar su código a Python 3 aunque las librerías sean compatibles, y a pesar de que existen numerosas herramientas que les pueden facilitar el proceso. Muchos no lo harán hasta que no le vean los cuernos al toro.
          Si tienes en curiosidad en saber qué paquetes están migrados y cuáles no, esta página, que se actualiza con frecuencia, puede ayudarte.
          Saludos

Responder a Javier Montero Cancelar respuesta

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies