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. :)
No hay comentarios.:
Publicar un comentario