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. :)

viernes, 1 de mayo de 2015

Breves comentarios sobre los libros que leí en Abril de 2015

Los siguientes comentarios son totalmente personales y para nada profesionales. Además, por su naturaleza, podrían contener spoilers.


Secretos por Sara Shepard (2007)

Este es el segundo de nosécuantos libros de esta saga. En comparación con el primero, este me pareció más atractivo. Quizás sea porque relata los sucesos ya de forma más diferente a como suceden en la serie de televisión.

Algo que me llama la atención es que las chicas no terminan de reunirse aún después de todos lo que ha ocurrido. Entiendo que su relación se deterioró por no haberse visto en muchos años, pero las circunstancias apremian para que actúen en equipo, mas apenas se confían algo. Es cierto que cada quién está ocupada con su secreto en particular, pero de eso a no preocuparse por las que antes eran sus mejores amigas (o que al menos se respeten) ya es mucho. Es como si de verdad todo hubiera sido un mundo alterno creado por Allison y ahora apenas se comienzan a conocer.

Por otro lado... ¡se murió Toby! Y no sólo eso, ¡se suicidó! O bueno, quizás sólo lo están haciendo parecer como así sucedió. No me sorprendería si en el siguiente libro «revive» o no era él. 

Por último, es de agradecer que Aria y Ezra no se hayan dirigido apenas la palabra. En la serie desde el principio pareciera que se pegaron con chicle y no se pudieran separar, aún a pesar de sus peleas constantes que desde ya se sabe que pasará (una versión no violenta del ciclo de la luna de miel). Al menos así parece más real su relación, no tan a la Disney.

A ver que tal sale el tercero.

El curioso incidente del perro a medianoche por Mark Haddon (2003)

Esta historia decidí leerla porque me llamó la atención el nombre; me gustan los libros con títulos curiosos. Por algún motivo sabía que no me decepcionaría, y efectivamente, no me decepcionó.

Leer este libro fue genial. Me impresionó la forma en que se desenvuelven las cosas a partir de la muerte de Wellington, la cual queda en una especie de segundo plano por todo lo que Christopher descubre mientras la hace de detective al intentar encontrar al asesino.

Es divertido que se incluyan guiños matemáticos, tanto en la narración como en la estructuración del libro. Junto a la forma de narrar la historia en primera persona, hacen de esta una novela muy particular. 

Lo que sí no me gustó fue que, por un error de su padre, de pronto Christopher lo odie y le tenga miedo. No es lógico puesto que su padre le demostró muchas veces que podía confiar en él, cuidándolo, dándole cariño y luchando él sólo para que no le faltara nada. Es más, juzguen por ustedes mismos la forma en que se explica:

Mira, a lo mejor no debería decirte esto, pero... quiero que sepas que puedes confiar en mí. Y... vale, a lo mejor no digo siempre la verdad. Dios sabe que lo intento, Christopher, Dios sabe que lo hago, pero... La vida es difícil, ya lo sabes. Joder, es durísimo decir la verdad todo el tiempo. A veces es imposible. Y quiero que sepas que lo estoy intentando, que de verdad lo estoy intentando. Y quizás éste no sea un buen momento para decirte esto, y sé que no va a gustarte, pero... Tienes que saber que a partir de ahora voy a decirte la verdad. Acerca de todo. Porque... si uno no dice la verdad ahora, entonces más tarde... más tarde duele todavía más. Así que...

Eso es amor. Al menos debió dudar antes de decidir que su padre era un hombre malo.

Sin embargo, a su madre no parece guardarle ningún resentimiento. Aún cuando fue ella quien engañó a su padre, los abandonó a ambos y sin más se desentendió con la excusa de que no podía con el paquete. No comprendo tal razonamiento por parte de Christopher, quién dice le agrada el sentido común. Fue algo superficial.

El curioso incidente del perro a medianoche fue mi libro favorito de abril. Si tienen oportunidad de leerlo, seguro que me darán la razón. También se está presentando en teatro, aunque lamentablemente no en mi ciudad. Ojalá algún día se me haga asistir.

lunes, 13 de abril de 2015

Reflexiones sobre la tristeza, melancolía, ansiedad y otras chuches

A mis 24 años he tenido la fortuna de experimentar una gama muy diversa de sentimientos, y por ello, le estoy agradecido a Dios. Gracias a esto puedo afirmar abiertamente que todos y cada uno de estos ―los sentimientos― son necesarios y no deberíamos abstenernos ni prohibirnos de sentir ninguno. Cada uno tiene su función, pese a que realmente jamás lleguemos a comprender exactamente para qué carajos tuvimos que pasar por esta u otra experiencia.

Eso sí, de la misma manera en que el cuerpo debe consumir apropiadamente ciertos alimentos, nuestra alma siempre debe tener bien diversificado y proporcionado su consumo de emociones. De no ser así, sin lugar a dudas caeríamos en algo muy, pero muy ―créeme, muy― pesado. Un nivel completamente distinto al de cualquier padecimiento fisiológico.

El cuerpo pese a toda su complejidad, es bastante más sencillo de tratar en comparación de lo que es el alma. La mente es un terreno aún casi desconocido y bastante peligroso de andar. Sin embargo, todo lo referente al ámbito psicológico es relegado a un segundo plano en el mundo actual. Las personas tienden a juzgar y a menospreciar el sentir de los demás de una forma tan rápida y cruel que suena a chiste que afirmemos que vivimos en una sociedad civilizada. Y no es precisamente a la falta de empatía de las personas, sino a una ignorancia casi auto-impuesta. Ciertamente se tiene acceso y oportunidad de aprender sobre los sentimientos y sobre cómo tratar los de los demás, pero la mayoría de las veces eso suena «tan irrelevante» en comparación con otros asuntos que simplemente se pospone para «cuando haya tiempo», lo que en cristiano significa: nunca.

En TED hay una conferencia afín a esto y que comparto a continuación:



Nuestra mente puede ser nuestra mejor amiga, pero también puede volverse nuestra peor enemiga y encaminarnos a la muerte. Y no, no estoy exagerando. Cuando nuestra alma deja de recibir sentimientos en las proporciones adecuadas y abandona su estado de equilibrio cosas muy malas suceden. Y es malo porque este desequilibrio casi siempre tiende a situaciones negativas que incluyen sentimientos de tristeza, melancolía, ansiedad y un largo etcétera. Se puede dar también el caso contrario ―faltaba más―, pero las mayorías de las sociedad, sobre todo las más industrializadas, hacen difícil tal caso. Como sabiamente dicen los sudafricanos: «yo soy lo que soy en función de lo que todos somos».

Así que reflexionaré sobre la parte negativa del desequilibrio sentimental.

Algunas veces es temporal. Esto puede ser derivado de situaciones donde no nos encontremos con el resultado que esperábamos. Obviamente, situaciones así son relativamente comunes y para la mayoría de las personas es algo que se supera pronto. Pero hay también personas a las que no les es tan sencillo, y son estas a las que la tristeza se vuelve algo crónico, lo que a su vez trae consigo otros sentimientos como la melancolía, ansiedad, nostalgia y cien demonios más.

A esta última situación también se puede llegar de una forma tan gradual, casi imperceptible. Algo así como con sucede con las ranas¹:

Si usted arroja una rana viva a una cazuela con agua hirviendo, la rana con toda seguridad se salvará, pues ante la sensación abrasadora del agua en ebullición, el batracio se impulsará sobre el agua en centésimas de segundo y saltará fuera de la cazuela humeante.
Pero existe una pequeña variante del experimento. Meta la misma rana en la misma cazuela, sólo que esta vez llena de agua fría. La rana se sentirá cómoda en su elemento, y no saltará. Luego caliente paulatinamente el agua, y verá como la rana termina su vida cociéndose sin que apenas se entere. ¿Qué ha pasado? Simplemente que en el segundo experimento la rana no detecta los pequeños cambios paulatinos, sino que percibe una agradable tibieza que termina llevándole a la muerte, pues cuando quiere reaccionar ya es tarde, bien porque carece de fuerzas, bien porque no encuentra la base necesaria para apoyar un enérgico salto o simplemente porque carece ya de la voluntad de salvarse.

Como dije anteriormente, la mente humana es un mundo completamente desconocido, y es precisamente por desconocido que se prefiere ignorarlo esperando no tener que entrar y enfrentar a lo que se presente.

Y es aquí cuando llego al meollo de estas reflexiones, el cual es poner sobre la mesa la cruda verdad que es que no todos los que llegan a tales instancias tienen la culpa de estar así. Se debe tener en cuenta eso siempre, ya sea que se enfrente uno ante una situación así o tenga que prestar primeros auxilios emocionales. Nadie quiere ni elige estar en esa situación, pero el sobreponerse puede llegar a ser una tarea titánica. Las personas que pasan por algo así tienen plena conciencia de que su imposibilidad de realizar inclusive tareas sencillas es ridícula como para que encima llegue alguien y diga: «todo está en tu mente, anda levántate y ponte a hacer algo productivo».

Si estás en equilibrio con tus sentimientos, practica entonces tu empatía y se comprensivo con quien no tiene la fortuna de estar bien consigo mismo. El apoyo de los demás puede ser determinante para quién está así. No te canses de apoyar y ayudar, ni mucho menos dejes de insistir. Estas acciones, a mi parecer, son las que de verdad fundamentan una sociedad civilizada.


1. De Brabander, C. (2012). La rana cocida. Obtenido el 12 de abril de 2015, desde http://sechangersoi.be/ES/5ES-Leyendas/laranacocida.htm