Entradas

Para aprender hay que equivocarse...

El único hombre que no se equivoca es el que nunca hace nada. Johann Wolfgang Goethe

Gestión de ficheros de configuración de aplicaciones, en Python

Imagen
Hola. En este post vamos a ver cómo gestionar ficheros de configuración de aplicaciones. Un fichero profile , también llamado fichero de perfil , fichero de configuración ó de inicialización es un archivo de texto plano, normalmente con extensión .INI (aunque no es indispensable), consistente en una serie de etiquetas de sección , las cuales se encierran entre corchetes ([]), y claves , las cuales son seguidas por un signo igual (=) y un valor . Cambiando los valores asignados a las claves se puede especificar una configuración personalizada ( custom ) para cada instalación de una aplicación. Cuando se quiere crear un fichero de configuración, se tiene que seleccionar el nombre de la sección y clave y determinar los valores que se usarán para dicha clave. Por ejemplo, un fichero profile podría contener información sobre un usuario de una aplicación. En el siguiente ejemplo, la información de un usuario es el nombre de la sección y los otros valores son las claves . [INFO_USUARIO...

Calcular tiempos de ejecución, en Python

Imagen
Hola. Una forma rápida y sencilla de evaluar un algoritmo es calcular el tiempo de ejecución del mismo, para ver si efectivamente es óptimo para nuestros intereses. Este tipo de análisis puede hacerse matemáticamente, ó si disponemos de algún "proceso" que nos indique la rapidez del mismo. No voy a entrar aquí sobre como calcular tiempos de ejecución O, Omega y demás cosas de estas. En este post vamos a ver la forma de calcular el tiempo de ejecución, en segundos, para cualquier algoritmo. Para nuestro ejemplo, mediremos el algoritmo de ordenación QuickSort . Lo que vamos a crear es, mediante una función decoradora , una función para calcular tiempos de ejecución. Nuestra función de medición es la siguiente: def cronometro(funcion): def funcion_a_ejecutar(*argumentos): # Tiempo de inicio de ejecución. inicio = time.time() # Lanzamos función a ejecutar. ret = funcion(*argumentos) # Tiempo de fin de ejecución. fin = time.time() ...

Problema de algoritmia, en Python

Imagen
Hola. En este post vamos a ver la resolución de un problema de Algoritmia típico, resuelto en Python. El enunciado me lo ha enviado un navegante , entusiasta de Python , como yo. Es el siguiente: A partir de una cadena introducida por el usuario, se trata de pintar una caja de texto con la propia cadena, utilizando espacios en blanco. La complejidad reside en cómo pintar las cadenas reversas, esto es, escritas al revés. Hay varias formas de resolver el problema. Con listas parece obvio, aunque yo lo he resuelto de la manera más fácil para mí, claro. Este es el código: # -*- coding: cp1252 -*- # Ángel Luis García García # Algoritmia while True: # Introducimos palabra. cadena = raw_input('Introduce palabra: ') # Si no escribimos nada, salimos. if len(cadena) == 0: break # Longitud de la cadena. long_cadena = len(cadena) # Espacio en blanco. blanco = " " * (long_cadena - 2) # Pintamos la cadena de arriba. print cadena # Pintamos las col...

Persistencia y herencia de objetos, con Python.

Imagen
Hola. En este artículo vamos a ver las ventajas de uno de los pilares fundamentales de la programación orientada a objetos, la herencia , así como la persistencia de objetos, una forma de guardar información en disco sin necesidad de bases de datos ni ficheros estructurados. ¿Cómo? Guardando directamente el objeto en disco. Como tantas veces se ha comentado en este blog, hay que ser ordenado, y aquí vamos a poner en práctica uno de mis pilares fundamentales de programación , a saber: Si un objeto puede guardarse y volver a estados diferentes, podría ser interesante. En primer lugar vamos a crear una clase base , de la cual se pueda heredar ciertos métodos que nos serán de utilidad en todas las clases que hagamos después. Es decir, la estrategia consiste en crear nuestra propia librería de clases , con ciertas clases y/o funciones si se precisara, lo más genéricas posibles, para poder reutilizar el código escrito. Una clase base genérica heredará del objeto base de Python , esto es, ...

Manual de Python para aprender a programar

Imagen
Hola. He encontrado un manual gratuito para aprender a programar, con la ayuda de Python. Se titula: Aprenda a Pensar Como un Programador con Python Se puede descargar el PDF desde http://manuales.gfc.edu.co/python/thinkCSpy.es.pdf . Está escrito en español. Orientado a aprender a programar, no el lenguaje Python en sí, aunque al final se aprenda, sino que se utiliza Python como guía para el aprendizaje de los fundamentos de la programación, viendo todos los conceptos propios de la misma. Esta obra está dirigida tanto a aprendices de programador, profesionales que necesiten de conocimientos básicos de programación, pasando por profesionales que necesiten hacer consultas puntuales. Debido a la facilidad de aprendizaje del lenguaje Python , su nivel pedagógico es elevado. Estamos hablando de un curso completo de fundamentos de la programación , siendo Python el eje vertebrador de las exposiciones y ejemplos conceptuales. Así pues se habla de tipos de datos como listas, cadenas ó dic...

IronPython y Sybase DataWindow .NET, en SharpDevelop, y 3.

Imagen
Hola. Seguimos con la construcción de una aplicación de gestión con IronPython y Sybase DataWindow .NET en SharpDevelop . Este post es continuación del anterior en El Viaje del Navegante . CREANDO CONEXIONES ENTRE UN CONTROL DATAWINDOW Y LA BASE DE DATOS MEDIANTE UN OBJETO TRANSACTION Vamos a conectar el Control DataWindow a la base de datos de MySQL . Darse cuenta del juego que da esto, ya que podemos tener una serie de DataWindows conectados a origenes de datos diferentes, siempre y cuando el SGBD sea el mismo, esto es, podemos cambiar, en una base de datos, de producción a pruebas únicamente cambiando la cadena de conexión del objeto transacción, sin que afecte en absoluto al DataWindow . Arrastramos un objeto Transaction a la ventana. En las propiedades del objeto Transaction le indicamos las características de la conexión ( ¿Recuerda el lector como se obtenía la cadena de conexión en el Designer ? ). ¿Dónde decirle al DataWindow que coga la conexión del objeto Transaction ?...