Archive for the python Category

resumiendo el libro de Django

Posted in Linux, python, software libre, Uncategorized with tags , , on 28 febrero 2009 by riverplatense

En mi camino de aprender Django, me encontré con el Djangobook, y a partir de allí El libro de Django, traducción del original hecha entre otros por el amigo Humitos. Ahora les paso un resumen de ese libro, en esta primera entrega llegamos a hacer nuestra primer página dinámica con este framework.

Resumen del Djangobook

Para crear el proyecto mysite en el directorio actual

$ django-admin.py startproject mysite

Crea los siguientes archivos:

__init__.py
: Un archivo requerido para que Python trate a este directorio como un paquete
manage.py: Una utilidad de línea de comandos para interactuar con la aplicación
settings.py: Opciones y configuraciones del proyecto
urls.py: Tabla de contenidos del proyecto

Django trae un pequeño servidor para probar el proyecto. NO usarlo en reemplazo de Apache u otro de producción, es sólo para probar mientras uno desarrolla.

$ python manage.py runserver

Aparece algo parecido a:

Validating models…
0 errors found.
Django version 1.0, using settings ‘mysite.settings’
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

Eso quiere decir que el servidor está corriendo y si voy al navegador y entro en http://localhost:8000 voy a ver la página de prueba.

Ahora que sabemos que funciona, vamos a hacer nuestra primera página dinámica, para empezar haremos una que indique la hora actual. Se debe hacer una *función de vista* (view function) que es una función que toma como argumento una petición web y retorna una respuesta web. Es decir una página, un error 404, un documento, etc. Entonces creamos un archivo llamado vistas.py en el directorio mysite y escribimos:

from django.http import HttpResponse
import datetime

def dia_hora_actual(request):
ahora = datetime.datetime.now()
html = "Ahora es %s." % ahora

return HttpResponse(html)

Repasemos línea por línea:

* Primero importamos la clase HttpResponse
* Luego importamos el módulo datetime desde la biblioteca standard de Python
* Definimos la funcion dia_hora_actual() que es una funcióń de vista. Toda función de vista toma como primer argumento un objeto HttpRequest al que se le asigna el nombre “request”
* Calculamos el valor de ahora mediante la biblioteca estandard de Python
* Generamos el html con la respuesta
* Generamos el objeto HttpResponse con la respuesta. Casi siempre una función de vista es responsable de crear un objeto HttpResponse

Ahora bien, cómo le “decimos” a Django que use ese archivo? Allí empiezan a tallar las *URLconfs*. Son tablas de contenido que le indican a Django “para tal URL usá este archivo, para esta otra URL usá este otro código, etc”

Veamos el archivo urls.py que se generó al crear tu proyecto:

from django.conf.urls.defaults import *

urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.foo.urls')),

# Uncomment the next line to enable the admin:
# (r'^admin/(.*)', admin.site.root),
)

Repasemos este archivo línea por línea:

Primero importamos todos los objetos desde el módulo django.conf.urls.defaults, en ese paquete obtendremos una función llamada “patterns”

Luego llamamos a esa función patterns() y guardamos el resultado en la variable urlpatterns. El argumento de la función es una cadena vacía. Todas las demás líneas están comentadas.

En este momento nuestra aplicación está en blanco, nueva, entonces Django sabe que debe mostrar la página “It worked!”. Vamos a cambiar este archivo para que podamos mostrar la hora y fecha actuales:

from django.conf.urls.defaults import *
from mysite.vistas import dia_hora_actual

urlpatterns = patterns('',
(r'^time/$', dia_hora_actual),
)

Lo que hacemos es importar la función dia_hora_actual desde vistas.py y por otro lado agregamos la línea (r’^time/$’, dia_hora_actual), que es una tupla compuesta por una expresión regular y la denominacipon de la función. En español, le decimos a Django que toda petición web URL /time sea manejada por la función dia_hora_actual

La expresión regular implica que la URL debe ser exclusivamente “time”. El ^ al principio y el $ al final indican “eso y nada más que eso”.

Ya podemos ir al navegador y ponemos localhost:8000/time y deberemos ver la página que generamos.

Anuncios

Terminamos el curso de Python – Ejercicios y evaluación

Posted in actualidad, educación, Linux, python, Sanca, software libre with tags , , , , on 21 diciembre 2008 by riverplatense
wxPython, la biblioteca gráfica usada en el curso

wxPython, la biblioteca gráfica usada en el curso

Según comentaba acá , este año tuvimos la inmensa dicha de compartir el primer curso de Programación usando el lenguaje Python, en la Escuela de Oficios San Cayetano, perteneciente al CFP 401 de Vicente López, Provincia de Buenos Aires.

En esa primera entrega listaba los primeros ejercicios, completo en este post los trabajos que hicimos en este año:

Empieza con ejercicios en Python pelado, o sea aplicaciones de consola.

#38    Usando una variable booleana, pedir números por teclado hasta que se ingrese un cero, al pasar estos devolver el resultado de la multiplicación de todos los números ingresados.

#39   Primer Proyecto: Hacer un juego   donde la PC seleccione un número al azar entre 0 y 100. El jugador debe  ir tratando de  adivinar y el programa devolverá “Muy bajo”, “Muy alto” según corresponda. Una vez que adivina, mostrar un mensaje de felicitación  junto a la cantidad de intentos.

#40   “El semáforo loco”: En una esquina un semáforo toma valores aleatorios de rojo, amarillo y verde y no lo podemos controlar.
Programar el semáforo de la calle transversarl para evitar accidentes.

#41  Programar un juego de “piedra”, “papel” y “tijera”. Las  reglas son las siguientes: 1º)  La aplicación le  pregunta el nombre al jugador.  2º)  Luego pregunta cuantas manos van a jugar.  3º)  El programa hace su primer jugada, le pregunta al jugador la suya y calcula el ganador.  4º) Una vez que llega a las manos acordadas en el punto 2 finaliza la partida y muestra el resultado final.

#42  Hacer un pequeño juego donde la PC nos desafía al “Cara o Seca” en 3 manos.

#43  El programa simulará el juego de adivinar en qué mano está la moneda. Le preguntará a la persona el nombre y cuantas partidas quiere jugar, luego calculará el ganador.

#44  Pedir el nombre de la persona y un rubro (impuestos, servicios, etc.) e ir solicitando e ingresando los gastos correspondientes hasta que la persona ingrese 99999. Allí devolver la suma de lo ingresado. Si la persona ingresa un número > 10000 ignorarlo.

#45  Pedir el ingreso de diez nombres de personas, contar cuantos “Perez” aparecen.

#46  Dada una palabra devolver en orden inverso.  Es decir si se ingresa “Calcular” devolver “Raluclac”

#47  Dada una palabra o una frase, decir si es o no un palíndromo (capicúa)

#48  Reformar el ejercicio 47 para que descarte los espacios y funcione con frases.

#49  Escriba un programa que permita crear una lista de palabras. El programa pide un número y luego solicita ese número de palabras para crear la lista. Por último el programa tiene que escribir la lista completa.

#50  Sea una lista de personas autorizadas en una empresa a manejar una aplicación. Hacer un programa que pida el nombre,  busque en la lista si ese nombre está autorizado o no. Si no lo está escharlo y terminar el programa; si lo está pedirle la edad y  responderle aproximadamente  en que año nació. Despedirlo y terminar el programa.

#51  Pedir un número por teclado y calcular la serie de Fibonacci que no sobrepase ese valor.  Los núm de la serie deberán almacenarce en una lista y ser mostrados al final del ejercicio.

#52  Hacer un programa que nos dé la bienvenida. Que tenga un menú con dos opciones: 1) Usar el  programa, 2) Ayuda. Si se elije el menú “Ayuda” mostrar un pequeño texto explicativo y terminar. Si se elije la opción “Usar el  programa”  pedirá un número y devolverá los multiplos de ese número.

#53  Sea  la siguiente lista: Lista= [“River”, “Boca”,  “CASLA”, “Velez”, “Newell’s”, “Racing”], hacer un  programa que  presente  un  menú  como el  siguiente:
1) Agregar
2)  Quitar determinado ítem
3)  Listar
4)  Ordenar
5) Acerca de…
6) Salir

#54  Hacer un programa que me pida mi nombre y lo guarde en un archivo llamado “datos.txt”.

#55  Hacer un programa que almacene nombres de estudiantes. Los debe guardar en un archivo llamado “estudiantes.txt”. Además debe poder mostrar todos los estudiantes que se ingresaron hasta el momento. Hacer un pequeño menú.

#56  Modificar el programa anterior para que podamos dar de baja en el archivo.

#57  Hacer un programa  que pida por teclado  3  números. Decir si  se  puede formar un triángulo  con esas tres medidas de lados. Si se puede aclarar qué tipo de triángulo es. (para que se pueda formar un triángulo, la suma de dos lados tiene que ser mayor al tercero).

#58  Pedir 3 lados y primero: decir si con esos lados se puede hacer un triángulo. Resolverlo usando funciones.

#59  Pedir 2 palabras y decir si riman o no. (Llamamos “rimar” a que las últimas 3 letras sean iguales)

#60  Pedir un número inferior a 4mil y que el programa lo escriba en números romanos.

#61   Usando  diccionarios, elabore una agenda de  teléfono de los compañeros del  curso, donde  pida el  nombre y  devuelva  el teléfono.

#62  Practicamos Clases con el siguiente modelo de aplicación:

class Persona:  ———->  definición  de clase
def saludar(self):  ————–> método

print “Hola!”
def despedir(self):   —————> método
print “Chau!”

cacho =  Persona()   ——> Instancia
cacho.saludar()
cacho.despedir()
olga =  Persona()   ——–> Instancia
olga.despedir()
nadia =  Persona()  ——-> Instancia

#63   Crear una  clas persona.

#64   Crear 2  clases:

-Profe ( def  __init__ : nombre,  curso, sueldo.  def  saludar)
-Estudiante ( def  __init__ : nombre,  curso, edad.   def  inscribir  )

#65   Hacer un programa usando clases, que por un lado  pida : nombre, apellido,  dni y tel.  de un socio.
Además permita ingresar  título y código de una película / libro  alquilada. Todo funcionará a través de una base de datos MySQL.

A partir de acá comenzamos con una biblioteca gráfica llamada wxPython , es decir que las aplicaciones dejan de ser en consola para tener una GUI.
#66 “Hola  mundo!” en ventana.

#67  Diseñar una ventana con dos botones abajo a la derecha que digan  “aceptar”  y  “cancelar”.

#68   Realizar la siguiente interfase:

Ingreso de datos:
Nombre:             _______________   (wx.TextCtrl)

D.N.I. :                 _______________   (wx.TextCtrl)

Nacionalidad:   _______________   (wx.ComboBox)

Estado Civil:      ·  soltero                 (wx.RadioBox)
· casado

Botones:                                           Cancelar                   Aceptar

#69   Hacer una ventana de 400 * 300 que aparezca centrada en la pantalla y  dos botones: El botón “Cerrar” para que termine la aplicación y el  botón  “Saludar” para que aparezca  un saludo en el panel.

#70  Hacer una ventana de 350 * 250 la cual tenga en el panel el título “Probamos botones”  y tres botones:
1)  “Cerrar” —–>  Salir de la aplicación
2)  “Uno”  ——->  Que aparezca otra  ventana con un mensaje, el  ícono de “atención” y un  botón (Aceptar)
3)  “Dos”  ——->  Que aparezca otra  ventana con un mensaje, un ícono  y dos botones (SI/NO)

#71  Realizar una ventana en la que podamos ingresar un nombre y un teléfono y que cuando hagan  click en el botón  “saludar” nos aparezca otra ventanita que nos saluda y nos dice el núm de tel. Si se oprime el botón “Cancelar”  cierre la ventana.

#72  Realizar un a ventana en la que podamos ingresar: nombre (wx.TextCtrl), estado civil (wx.ComboBox), fecha de nacimiento (wx.DatePickerCtrl), y  tenga el botón “Cancelar” y “Saludar”.  Estos datos tienen que aparecer en un mensaje de diálogo.

#73  Crear un formulario para dar de alta un nuevo libro / película. Los  datos deben  cargarse  a una  base de datos MySQL a través de mysqldb.

#74  Crear una tabla  “club” con los siguientes campos: id-club,  nombre, anio-fundacion, cant-campeonatos. Luego ralizar un formulario para rellenar con el nombre de un club, su año de fundación y cantidad de campeonatos.  Estos datos deben ingresar a la base  de  datos.

#75 Crear una nueva ventana  con wx.MenuBar  y  wx.StatusBar, que contenga la anterior ventana  y una nueva de alta de jugadores según el club  ingresado.  Además mostrar  un listado de los clubes y otro de los jugadores ingresados hasta el momento.

#76  Realizar un editor de texto.

# 77 Desarrollar con todo lo aprendido un sistema de administración con ABM a manera de trabajo final en modo proyecto. (En respuesta a esta consigna, los estudiantes han desarrollado sistemas de turnos para consultorios médicos, sistema de administración de servicios de una peluquería, de una biblioteca, pizzería, etc.)

Hasta allí llegamos, esperamos que sea útil para muchos esta lista de ejercicios, que la usen en cursos similares o en autoaprendizaje, están pensados para ir de lo más fácil a lo más complejo, lógicamente.

Realmente, el resultado ha sido completamente satisfactorio, más de lo que esperábamos, nos sentimos satisfechos ya que han terminado catorce compañeros que se llevan los rudimentos necesarios para hacer su camino en este mundo de la programación y que, seguramente, serán muy buenos profesionales si se lo proponen.

Jornadas en San Francisco (Córdoba)

Posted in educación, jornadas, python, Sanca, software libre on 21 mayo 2008 by riverplatense

El pasado fin de semana tuve la fortuna de participar en las Segundas Jornadas de SL organizadas por el Grupo DATA de la UTN Regional San Francisco en la hermana provincia de Córdoba.
Desde el punto de vista organizativo, como siempre conmueve ver el despliegue de los grupos que trabajan incansablemente para que estos eventos se desarrollen de la mejor manera y que asistentes y disertantes disfruten de la cuestión. Mis felicitaciones a los muchachos. Más allá de las conocidas por mí y siempre disfrutables charlas de amigos como M. E. Casañas y F. Heinz he presenciado eventos más que interesantes como una charla sobre “Software Libre como tema de la filosofía y la economía política” dada por Yaco, una sobre “Cocos” de Lucio Torre, otra sobre “Programación de juegos educativos para la OLPC” de Alecu y Humitos, otra sobre “ligthhttpd” de Martín Sarsale, etc.
Aprendí mucho, conocí a los muchachos de Tuquito como Mauro Torres que me prestó unas OLPC para que juegue y la conozca. También compartí con los muchachos de Catamarca, Tucumán y Salta con los que quedamos en armar algo para la segunda mitad del año, ojalá se dé para que podamos arrancar para el NOA a laburar por el software libre. Parece que mi charla les ha gustado y que podemos trabajar en ese sentido
También disfruté mucho de la charla de “Seguridad en Debian”, paradójicamente dada por Luciano Bello, el mismo que descubrió un importante bug de seguridad en Debian esa misma semana. Así es que también en ese sentido aprendí mucho.
Los momentos out of the box fueron geniales con mucha pizza y cerveza, así es que espero que la cosa se repita. Conocí personalmente a tipos como Alecu, Karucha, Lucio, Martín, que los tenía de las listas o de PyAR y la verdad es que me han caído muy bien. Explicando las cosas sin subirse a caballo alguno siendo que saben mucho, y con muy muy buena onda, da gusto conocer gente así. Además un párrafo para Perrito que nos bancó a la madrugada en su casa con la mejor onda. 🙂
Resumiendo, sabida es mi fascinación por esta clase de eventos y la utilidad básica y primaria que les asigno. Así es que celebro la realización de esta jornada y brindo por la multiplicación de las mismas. Felicitaciones y adelante.

Como no tengo cámara de fotos me tomo el atrevimiento de linkear la galería de Karucha desde su blog. Las fotos que tomó este amigo las pueden encontrar acá.

Primera evaluación del curso de programación

Posted in Carapachay, educación, python, Sanca, software libre on 11 mayo 2008 by riverplatense


El pasado jueves, tuvimos la primer evaluación del Curso de Introducción a la Programación usando Python y Software Libre que estamos dicatando en la Escuela de Oficios San Cayetano

Sinceramente quedé muy emocionado por los resultados. La evaluación consistía en hacer un juego de pase inglés, donde había que tirar los dados y si se saca 7 u 11 se gana la partida. Con 2, 3 o 12 se pierde la misma y si se saca otro número hay que seguir tirando hasta repetir el número antes que sacar 7.

Los programas resultantes los pueden encontrar a continuación:

Quiero felicitar públicamente a los estudiantes que han hecho trabajos de muy buen nivel, máxime teniendo en cuenta que hace dos meses no sabían lo que era programar y muchos hace un año no sabían lo que era un sistema operativo.

Felicitaciones:

Haciendo clic en cada nombre podemos bajar los ejercicios:

  • Yésica y Maximiliano