Programación Práctica con Python 1: Elementos básicos
Por @jobliz
En el capítulo anterior…
En el post anterior presentamos al lenguaje Python, cómo instalarlo, y el propósito de ésta serie de tutoriales. La idea es llegar a la parte práctica lo más pronto posible, aunque cómo también se quiere que quienes estén empezando de cero puedan seguirlos, entonces dedicaremos dos entregas a los fundamentos de la programación en Python:
En ésta, veremos los elementos básicos del lenguaje, variables, condicionales, ciclos, etc, y además algunas de las costumbres de los programadores. Si ya tienes algo de experiencia en Python puedes pasar directamente a la próxima.
En la siguiente, veremos cómo se organiza el código en Python: Cómo acceder al código que hemos escrito en otro archivo, que es un módulo, y los sitios de donde se suelen descargar desde internet. Ésta parte es fundamental para el programador en Python y en cualquier otro lenguaje, ya que conseguir módulos ya hechos por otras personas simplifica mucho todo trabajo. Además, todo lo que se hará en la parte práctica de éstos tutoriales requerirá instalarse de las maneras expuestas.
Nota: Para tener una visión más amplia del lenguaje que la aquí presentada, puedes revisar éstos materiales:
Los primeros 4 capítulos de How To Think like a Computer Scientist
Los ejercicios del 0-6 y 18-21 de Learn Python the Hard Way
Antes de empezar.
Para escribir código hace falta un editor de texto hecho especialmente para eso. En realidad es posible hacerlo hasta en el bloc de notas, pero resulta extremadamente incómodo, como lo sería pelar una papa con una cuchara. Simplemente no está hecha para eso. Al instalar Python en Windows éste viene automáticamente con el editor IDLE, que es bastante bueno. y que será el que usaremos aquí. Éste, sin embargo, sólo tiene soporte para Python. Si en algún momento decides programar en otro lenguaje, es conveniente que busques un editor especializado en dicho lenguaje, o un editor multilenguaje cómo Notepad++.
Si estás en Linux, puedes instalar IDLE usando el gestor de paquetes de tu distro.
En realidad, la cultura de la programación tiene un gran número de editores de código, y éstos a su vez vienen en formas distintas. Otros lenguajes de programación como Java o los de Microsoft (C#, Visual Basic) tienen una cultura de IDE (entorno integrado de desarrollo), donde un programa complejo y con muchas funciones es necesario para aprovechar el lenguaje al máximo. Sigue siendo posible escribirlo con editores más sencillos, pero eso no forma parte de las costumbres de su comunidad. La descarga del “lenguaje” siempre viene junto a la gran herramienta, como Visual Studio en el caso de C# o Netbeans en el caso de Java.
Python, y a su vez otros lenguajes como PHP y Ruby, también tienen programas como esos, pero en general dependen menos de ellos. Si te preguntastes porqué la descarga de Python era tan ligera, y no un archivo de 200+ megabytes, ello se debe a que el instalador sólo trae el lenguaje y una herramienta sencilla para manejarlo, no un entorno de desarrollo completo.
Ahora que tenemos nuestro editor de textos, es hora de usarlo. En IDLE, escribe ésto y presiona F5
print("Hola mundo")
Ello hará que la ventana de al lado en IDLE salude al mundo educadamente. Ésto, aunque sencillo, en realidad es una pequeña costumbre dentro del mundo del código. Ahora que escribistes un programa, aunque sea pequeño, programas. ¡Bienvenid@!.
Sí, lo sé. ésto no es mucho, y prometí cosas maś prácticas en la introducción. Te prometo que dentro de dos tutoriales estaremos accediendo a la búsqueda de Twitter a través de internet, así que te pediré un poco más de paciencia.
Manejando datos.
Cuando nos disponemos a la idea de programar, lo más inmediato que hacemos es pensar en datos. ¿Qué queremos manejar, y de qué manera el lenguaje de programación nos permite hacerlo?. Por lo general, todos los lenguajes ofrecen una manera sencilla de usar:
Números enteros, para manejar las cantidades más comunes. Un gran cantidad de “cantidades” con las que trabajaremos serán de éste tipo. Comúnmente se les llama integers o ints.
Números decimales, para manejar todas las cantidades que requieren más exactitud que un integer. Éstos reciben el curioso nombre de floats por la forma en que se implementan en el CPU. No es imprescindible conocer los detalles cuando se programa en Python, aunque más adelante veremos que igual hace falta algo de cuidado al manejarlos.
Texto, una manera de representar secuencias de letras de la forma más sencilla posible. Palabras, oraciones, párrafos, todo lo que queramos usar en el programa que sea combinaciones de caracteres. A eso se les llama strings, o cadenas en español, porque son cadenas de caracteres. Por cierto, haz click derecho en ésta página, y dale a Ver código Fuente. El código HTML también puede ser una string. De hecho, nos hará falta pensar así cuando vayamos a acceder a internet y a Twitter con nuestro código Python.
Valores Booleanos, que sólo pueden representar dos cosas: Verdadero o Falso. Nos serán útiles cuando queramos expresar cosas que sólo pueden tener dos estados.
Sin embargo, necesitamos un “sitio” donde colocar dichos valores para que nos seán útiles. Y esto nos lleva a…
La variable.
Para almacenar todos los tipos de datos que se mencionaron más arriba, existe lo que se conoce como variable, una especie de caja con una etiqueta que nos permite tanto guardarla en la memoria como darle un nombre que nosotros podamos recordar. Por ejemplo, si queremos tener un número que represente la edad de alguien, podríamos decir.
edad = 42
Allí creamos una variable de nombre “edad”, en la que colocamos el integer 42. En caso de que queramos especificar un nombre (string), sería así:
nombre = "Cimón Volíbar"
Los valores booleanos (True y False), se escriben tal cual (y con mayúscula al inicio) del mismo modo:
australiano = Falselatinoamericano = True
Cantidades como la estatura, por cierto, estarían mejor representada a través de un float (decimal) que de un integer. La única diferencia es el punto que separa la parte entera de la decimal.
estatura = 1.69
Con los floats, sin embargo, hay que tener especial cuidado con las multiplicaciones y divisiones. Sólo si alguno de los números involucrados es un float entonces el resultado también lo será. Una división de dos integers sólo dará la parte entera. Un caso particular sería:
dos = 5 / 2dosymedio = 5 / 2.0
No es tan difícil de recordar, pero este detalle le ha dado dolores de cabeza hasta a programadores no tan novatos. Conviene no olvidarlo siempre que se quiera trabajar con cantidades decimales.
Y así concluímos con las variables. Éstas son la forma de darle nombres a los datos para poder usarlos en nuestros programas. Sin embargo, necesitamos algo más que nombres. Para empezar, algo que nos permita decidir qué hacer en diferentes situaciones.
Listas y diccionarios.
Si los datos están relacionados de alguna manera, entonces conviene buscar alternativas a las variables sueltas. Por ejemplo, si queremos representar los números del 1 al 10, sería muy incómodo escribir una variable “uno”, otra “dos”, y así. Resulta mucho más sencillo ponerlas todas juntas en una variable especial, que las agrupe a todas:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Ésta es la que se conoce como lista, y nos permite guardar cualquier cantidad de elementos dentro de ella, conservando su orden. Podemos acceder a cualquiera de sus miembros llamándolos con el nombre de la lista y corchetes:
primero = numeros[0]
El primer elemento siempre será el cero, por lo que para acceder al último valor de la lista tendríamos que usar un 9, no un 10 (en éste caso). Además de las listas también existen diccionarios, que son útiles cuando queremos agrupar datos relacionados entre sí no a través de posiciones, sino de nombres:
alturas = { "juan": 1.79, "ana": 1.62, "godzilla": 252.1 }
Para obtener alguno de los datos, usaríamos entonces su nombre, en vez de su posición:
altura_juan = alturas["juan"]
De este modo, ya podemos poner en memoria listas y diccionarios de datos, pero aún no sabemos cómo recorrerlos. ¿Cómo ver si un elemento está realmente allí, o revisar el contenido automáticamente?. Para poder hacerlo nos hace falta otra técnica, los ciclos.
Ciclos.
A partir de aquí vamos a hacer algo nuevo, ya que necesitaremos escribir varias líneas de código: Usaremos Pastebin para mostrar el código, ya que permite verlo con colores y descargarlo sin dificultad. Volviendo al tema, una de las cosas que las computadoras hacen mejor que cualquier persona es repetir acciones. Mientras que a uno le empezaría a fallar la cordura al tratar de revisar un armario con cientos o miles de gavetas, tu CPU revisará cada elemento de tus listas o diccionarios de lo más tranquilo.
Puedes copiar y pegar el código de antes y los que vienen en un archivo .py y ejecutarlo dándole a F5 en el editor IDLE.
La primera línea en ambos casos (lista y diccionario) los define con algunos elementos ya dentro de ellos, y la siguiente es la forma de agregar datos a cada uno. Posteriormente se puede ver que las palabras for e in sirven para recorrerlos a ambos, pero con algunas diferencias. Mientras que una lista genera sólo una variable, un diccionario necesita dos, separadas por comas antes del in. Aparte de eso, el diccionario requiere de acceder al método iteritems que está en todos los diccionarios. En el próximo tutorial veremos con más detalle ésto. Por ahora, ya podemos crear, aumentar y recorrer listas y diccionarios.
Condicionales.
Lo que se conoce como condicionales es la forma en que el lenguaje te permite saber si se cumplen ciertas condiciones, y qué hacer en caso de que sean o no ciertas. En Python, ésto es manejado por las palabras clave if, elif y else.
La función.
Como te podrás imaginar, manejar un programa grande con miles (o millones) de variables sueltas y repitiendo siempre el mismo código para manejarlas es una tarea que no sólo te resultaría difícil a tí, sino que es imposible para cualquier ser humano. Y fíjate que dije “manejar”, no “crear”… porque ese tipo de código sí logra aparecer en el mundo, y los programadores sarcásticamente lo llaman código spaghetti. Cómo siempre, el artículo en inglés de la Wikipedia es más descriptivo, y también tiene apetitosas fotos de pasta. Pero creeme que nadie siente hambre del infierno que es tratar de comprender el código espagueti. Así que necesitamos algo para evitar que nuestro código caiga en esa mala práctica.
La primera herramienta para evitar el código espagueti es la función. Si la variable es una caja y un nombre, entonces la función vendría siendo una forma de acción, como lo sería abrir varias cajas y usar sus contenidos de cualquier manera. Cuando saludamos al mundo con ésta línea de código:
Allí usamos una de cada una:
print es la acción, y por tanto, la función en sí
“Hola mundo” es el nombre/variable/sustantivo.
Para que la relación entre ellas quede un poco más clara, podemos asignar el mensaje a una variable y luego pasársela a print:
Lo realmente interesante de las funciones, por supuesto, es que podemos crear las nuestras. En Python, el nombre de las funciones se define con la expresión… def, seguida de los nombres con los que usará las variables que necesita encerrados entre paréntesis:
En la función “factorial” podemos ver dos cosas. Lo primero, que sería la presencia de x y n entre paréntesis luego del nombre de la función, son lo que se conoce como argumentos. Son los datos que se le deben dar a la función para que… funcione. Por lo general, una función necesita recibir al menos un argumento para tener algún sentido. Es posible que una función no reciba ningún argumento, pero entonces sus usos son mucho más limitados.
Para continuar.
Si has llegado hasta aquí, entonces ya tienes una idea general sobre cómo se vé python al programar, pero probablemente sientas que faltan muchos detalles. ¿Cómo obtener sólo una parte de una lista?, y cosas similares. Para continuar aprendiendo los detalles, recomiendo una vez más los siguientes libros.
Cómo Pensar en Python
Learn Python the Hard Way
Cualquiera de los dos te servirá para conocer los primeros detalles del lenguaje. En la próxima entrega veremos, sin embargo, algo un poco más práctico. Cómo descargar módulos adicionales para Python. ¡Está en producción!
Manejo de Interfaz Gráfica de Usuario en Python
Por Miguel Alberto Sediles Di Quinzio. @nefisco
Este tutorial explica cómo realizar una interfaz gráfica (GUI) básica en python, la utilidad de esto como es casi evidente es que permite el desarrollo de aplicaciones de escritorio para todo usuario, mas allá de un script sencillo, permitiéndonos también desarrollar programas y aplicaciones más complejos y sin embargo accesibles a los demás.
Para este tutorial debemos tener previamente instalado Python 2.7, que es la versión del lenguaje que utilizaremos y el WxPython 2.8 que hasta la fecha es el ultimo han sacado, es compatible con Python 2.6 y Python 2.7.
Y si lo deseamos algún otro editor de Python aparte del que trae incorporado, en mi caso use el Active Python.
Elaboración:
A continuación explicare el código para realizar la interfaz, en este ejemplo realizare una interfaz de calculadora simple.
Import wx
Se realiza un import del modulo wx que es donde se contienen todos los comandos y funciones para el desarrollo de interfaces gráficas, la podremos usar una vez instalado el WxPython.
app = wx.App()
Creamos una variable app que será una instancia de la clase aplicación, al final veremos su utilidad.
Ahora crearemos el frame principal:
window = wx.Frame(None, title = 'Calculadora Basica en Python
by Nefisco', pos = (100,100), size = (420,400))
window es el nombre de mi frame, es una instancia d ela clase wx.Frame, espera un padre que como en este caso no tiene, ponemos None, un titulo, una posición inicial y un tamaño, todo esto lo ajustamos a nuestro gusto.
Los Botones:
suma = wx.Button(window, label = '+',
pos = (100 - 60 - 15, 230), size = (60,25))
resta = wx.Button(window, label = '-',
pos = (200 - 60 - 15, 230), size = (60,25))
multiplica = wx.Button(window, label = '*',
pos = (300 - 60 - 15, 230), size = (60,25))
divide = wx.Button(window, label = '/',
pos = (400 - 60 - 15, 230), size = (60,25))
Estos son los botones que usaremos, son instancias de la clase wx.Button, esperan un contenedor, el frame window en este caso, label es la lo que mostraran en la interfaz, para el ejemplo simplemente le asigne los operadores matemáticos, para que el usuario sepa cual usar, dependiendo de su gusto, pos es la posición donde se encontraran centro del frame y por ultimo size que es su tamaño, espera solamente ancho y alto (whidth y heigth).
Los Campos de Texto:
valor1 = wx.TextCtrl(window, pos = (10, 30),
size = (400 - 120 - 15 - 10, 25), style=wx.TE_PROCESS_ENTER)
valor2 = wx.TextCtrl(window, pos = (10, 100),
size = (400 - 120 - 15 - 10, 25), style=wx.TE_PROCESS_ENTER)
resultado = wx.TextCtrl(window, pos = (10, 170),
size = (400 - 120 - 15 - 10, 25),style=wx.TE_PROCESS_ENTER)
Son bastante parecidos a los botones solo que heredan de wx.TextCTRl, en posición esperan una coordenada X y otra coordenada Y, en size las dimensiones que tendrán, además tienen un estilo, wx. TE_PROCESS_ENTER, esto es para que el usuario pueda escribir los números, hay varios estilos como los solo lectura o los tipo contraseñas, que ocultan los caracteres escritos.
Las Etiquetas:
label1 = wx.StaticText(window,label='Valor 1',
size = (400 - 120 - 15 - 10, 25),pos = (10, 10))
label2 = wx.StaticText(window,label='Valor 2',
size = (400 - 120 - 15 - 10, 25),pos = (10, 80))
label3 = wx.StaticText(window,label='Resultado',
size = (400 - 120 - 15 - 10, 25),pos = (10, 150))
label4 = wx.StaticText(window,label='Made By Nefisco',
size = (400 - 120 - 15 - 10, 25),pos = (10, 300))
Mas simples que los campos de texto, simplemente son instancias de la clase wx.StaticText, esperan a un contenedor, window en este caso, un tamaño igual que los campos de texto y una posición igualmente en coordenadas X y Y, en label se asigna el texto que se desea mostrar en ellos
window.Show()
esto hace que se muestre nuestro frame, que ya contiene todos los elementos que le quisimos agregar
app.MainLoop()
Y por ultimo hacemos que la aplicación que creamos sea un bucle principal, de tal manera que tenga prioridad con la interfaz y la mantenga visible hasta que deseemos cerrarla nosotros mismos, esto evita que se sierre automáticamente, como pasa con los scripts una vez que terminaron su programación
El Código Completo:
import wx
app = wx.App()
#frame
window = wx.Frame(None, title = 'Calculadora Básica en Python
by Nefisco', pos = (100,100), size = (420,400))
#botones
suma = wx.Button(window, label = '+',
pos = (100 - 60 - 15, 230), size = (60,25))
resta = wx.Button(window, label = '-',
pos = (200 - 60 - 15, 230), size = (60,25))
multiplica = wx.Button(window, label = '*',
pos = (300 - 60 - 15, 230), size = (60,25))
divide = wx.Button(window, label = '/',
pos = (400 - 60 - 15, 230), size = (60,25))
#text box
valor1 = wx.TextCtrl(window, pos = (10, 30),
size = (400 - 120 - 15 - 10, 25), style=wx.TE_PROCESS_ENTER)
valor2 = wx.TextCtrl(window, pos = (10, 100),
size = (400 - 120 - 15 - 10, 25), style=wx.TE_PROCESS_ENTER)
resultado = wx.TextCtrl(window, pos = (10, 170),
size = (400 - 120 - 15 - 10, 25),style=wx.TE_PROCESS_ENTER)
#labels
label1 = wx.StaticText(window,label='Valor 1',
size = (400 - 120 - 15 - 10, 25),pos = (10, 10))
label2 = wx.StaticText(window,label='Valor 2',
size = (400 - 120 - 15 - 10, 25),pos = (10, 80))
label3 = wx.StaticText(window,label='Resultado',
size = (400 - 120 - 15 - 10, 25),pos = (10, 150))
label4 = wx.StaticText(window,label='Made By Nefisco',
size = (400 - 120 - 15 - 10, 25),pos = (10, 300))
window.Show()
app.MainLoop()
Aqui les dejo unas imágenes de el código completo en ActivePython y la interfaz en ejecución

En el próximo tutorial enseñare como manejar y agregar eventos a la interfaz para que la aplicación este completa y funcional
Si tienen alguna duda o sugerencia sobre el tutotial pueden escribirme a mi twitter @Nefisco o a mi correo.
Programación práctica con Python (Introducción)
Por José Reyna (@jobliz)
¿De qué se trata ésto?
Éste tutorial pretende ser una introducción a la programación desde cero en el lenguaje de programación Python. Éste es un lenguaje multipropósito ampliamente usado para un gran número de cosas, que van desde el desarrollo web hasta la computación científica, pasando por el desarrollo de “programas” de escritorio convencionales y “scripts” de cónsola para administrar sistemas. En resumen, hace de todo menos pan tostado. Incluso dicen que te puede hacer volar.
El objetivo principal, y lo que se espera que sea lo que haga distinta a ésta serie de tutoriales, es entregarte lo más rápido posible las herramientas y la habilidad para hacer cosas “útiles”. Existen muchos tutoriales de programación en internet, pero muchas veces cuesta imaginar como cada uno de los conceptos podrían usarse para algo “real”. La mayoría de las veces se presentan ejemplos “de juguete” que hacen muy poco para motivar a alguien que quiera ver a sus manos haciendo algo de verdad, y dejan con un sentimiento de frustración bastante incómodo (sí, es experiencia personal). Por ello, a medida que se avance en los conceptos de programación en ésta serie de tutoriales, iremos haciendo cosas como:
- Realizar búsquedas en Twitter
- Guardar datos con una base de datos SQL
- Graficar funciones matemáticas
- Leer programáticamente una hoja de Excel
- Un pequeño videojuego (Pong)
Por supuesto, al principio necesitaremos algo de tiempo estableciendo las bases, pero trataré que sea lo más breve posible. Python es conocido entre todos los lenguajes de programación por lo fácil que resulta de aprender, por lo que aprovecharemos esa “fama” para mostrar que con muy pocas líneas de código se puede hacer prácticamente magia.
Influencias / Lecturas adicionales
Sería deshonesto de mi parte decir que todo el contenido aquí presente es 100% inspiración mía. En internet ya existen materiales de alta calidad para aprender a programar, hechos por personas con una experiencia varios órdenes de magnitud más grande que la mía. Éste tutorial se nutre de varios de ellos, en particular de los siguientes:
- How to Think Like a Computer Scientist Versión en español
- Learn Python the Hard Way (realmente no es así de difícil)
- How to Design Programs
Como se puede ver, todas las lecturas se encuentran disponibles en internet sin costo alguno, aunque tienen versiones encuardenadas a la venta.
How to Think Like a Computer Scientist es uno de los libros más usados en la enseñanza de Python. Empieza desde lo más básico hasta las técnicas más avanzadas del lenguaje.
Learn Python the Hard Way, por su parte, está redactado en un estilo muy particular: Hace mucho énfasis en lo práctico y en la disciplina. Es como tener un sargento (bastante sarcástico, por cierto) indicando cada paso que debes dar. Pero es un sargento que tú decides tener, no te obliga (ni puede hacerlo) a seguir sus órdenes.
How to Design Programs, el último, no es precisamente un libro sobre Python, sino que utiliza un dialecto del venerable lenguaje Lisp. Sin embargo, considero que los primeros capítulos son la mejor introducción humanamente posible al arte de programar, clásica y elaborada con una gran atención al detalle.
Dado que mi estilo pedagógico es en su mayor parte una imitación de dichas fuentes, recomiendo la lectura de ambos a la vez que se siga éste material. Mis aportes son únicamente la suma de varias experiencias y líneas de código inconexas, que espero que tomen forma coherente a medida que se vayan presentando.
En cuánto a materiales, ya casi tienes todo lo que necesitas
De hecho, si usas Linux ya tienes Python instalado. Si estás en una PC con Windows, puedes ir a éste sitio y conseguir un paquete portable que incluso podrás poner en un pendrive y usarlo donde quieras, por comodidad o en caso de que no tengas una computadora propia. Sin embargo, en caso de que tengas una computadora propia recomendaría que realices la instalación estándar. Cada una tiene sus ventajas:
El paquete portable viene con algunos módulos de Python preinstalados que te ahorrarán la molestia de tener que buscarlos en otro sitio, y, por supuesto, es muy conveniente tenerlo todo instalado en un pendrive.
La instalación estándar te permitirá estar más en contacto con la manera “técnicamente correcta” de usar el lenguaje, instalando cada módulo a medida que lo necesites de la manera oficial.
Eres libre de escoger la que mejor se adapte a tus necesidades y expectativas. En cualquier caso, no es muy difícil pasar de uno al otro. Sin embargo, antes de empezar a trabajar con cualquiera de los dos es importante mencionar que existen en éste momento dos versiones del lenguaje: La 2, que es estable y tiene mayor soporte de módulos, y la 3, que es el futuro y ya lleva tiempo solidificándose, pero que carece de soporte para algunas librerías que usaremos. Por ello, los tutoriales asumirán que se usará la versión 2.
Fin de la introducción.
Ésto fue una descripción de lo que será ésta serie de tutoriales. Para el primer capítulo, que ya se encuentra en planificación, veremos los elementos fundamentales de la programación, desde las variables y sus tipos hasta un sencillo ejemplo de la orientación a objetos.
Nota: Antes del nuevo capítulo, ésta introducción tendrá próximamente screenshots de instalación de Python en Windows y cómo hacer el clásico “Hola Mundo”.

