Acerca de mi

Mi foto

Soy estudiante de posgrado en el Instituto Tecnológico de Ciudad Madero. Me apasiona la tecnología, la ciencia y el amor, en todas sus expresiones. Planeo conseguir la beca de Monbukagakusho e irme a Japón a hacer un doctorado, convertirme en astronauta y zanjar de la manera más memorable posible mi vida.

lunes, 18 de mayo de 2015

Calculadora escrita en Python para resolver operaciones aritméticas simples

Hace unos días, alguien me pidió por favor que le ayudara a realizar un programa en Python para dar con la solución al siguiente enunciado:

Supón que vas a desarrollar un programa de Python que actuará como una calculadora. La calculadora debe solicitar al usuario que introduzca dos números y una operación. La operación puede ser sumar, restar, multiplicar o dividir los dos números. El programa debe comprobar que el usuario no ha introducido el valor 0 para ninguno de los dos números. El programa también debe comprobar que el usuario ha entrado una de las 4 operaciones de valor (sumar, restar, multiplicar o dividir). El programa debe realizar el cálculo correspondiente y debe mostrar los resultados.

Me pareció por demás curioso, ya que es del tipo de problemas en el que puedes llegar a la solución desde muchos caminos. Y de entre todos esos caminos, intenté usar el más elegante posible. El resultado lo comparto a continuación.

#!/usr/bin/env python
# -*- coding: utf-8 -*- 

#  Copyright (c) <2015> <Manuel Alejandro Jiménez Quintero>
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  

# Usar expresiones regulares es la mejor manera de verificar si una cadena cumple con
# las condiciones que se propongan. En este caso, los operadores aritméticos permitidos.
import re
          
# Se realiza la lectura de la operacion a realizar.
operacion = raw_input("Escribe una operación aritmética simple (+-*/). Ej. \"2+2\": ").replace(" ", "")

# Aquí se realiza la comprobación para ver si se escribió bien la operación. La expresión regular
# busca que si la cadena de texto comienza con algún número (^d+). Después verifica si a continuación
# se encuentra uno de los siguientes operadores: +, -, * o /. Por último, comprueba si la cadena finaliza
# con algún otro número.
operadores_permitidos = re.match(r'^\d+[\+\-\*\/]\d+$', operacion)

if operadores_permitidos:
   # Si la operación tiene el formato correcto, entonces se evalua con la función eval() y se imprime.
   # Pero antes hay que comprobar una última cosa, si se va a dividir por 0. Para esto se ocupa lanzar
   # una excepción. Si no sabes qué es una excepción, la explicación sencilla es que es la manera
   # en que nos anticipamos a los errores que podrían suceder y determinamos cuál será la forma en
   # que los manejaremos. Lo que hay dentro de try se intentará realizar. Si algo sale mal, entonces
   # lanzamos la excepción ZeroDivisionError, que será el error que estamos previendo que podría suceder.
   # Al final envíamos un mensaje al usuario por si sucede esto.
   try:
      print eval(operacion)
   except ZeroDivisionError, e:
      print "Es imposible dividir por 0."
else:
   # De lo contrario, se advierte al usuario de que la operación que ha querido realizar no sigue el
   # formato adecuado.
      print "La operación (" + operacion + ") no está en un formato legible para este programa."


Como dije, curioso. :)

Publicar un comentario