Mostrando entradas con la etiqueta python. Mostrar todas las entradas
Mostrando entradas con la etiqueta python. Mostrar todas las entradas

sábado, julio 21, 2007

"PythonChallenge"

PythonChallenge es una web donde se nos presenta varios desafíos que hay que ir resolviendo con Python (en realidad se puede solucionar con cualquier lenguaje). La idea es dar un "incentivo" para que se aprenda el lenguaje de una forma divertida y practica. La verdad es que la idea esta buena y es bastante adictivo tener un desafío adelante, empiezas con el primero "bueno, vamos a probar" y después de dos horas dices "soluciono este y ya lo dejo... lo prometo... bueno uno mas solamente" :-P


Ya llevo algunos hechos y seguiré haciendo hasta que me aburra o me agarre sueño (lo que ocurra primero). Los primero 3, 4 son fáciles y de a poquito va aumentando la dificultad y en cada desafío tienes que usar algo en especial con lo cual esta bueno para practicar aquellas cosas que conoces o es la excusa perfecta para estudiar algún tema que no conoces. De todas formas invito a todo aquel que se quiera divertir un rato programando y solucionando "problemas de programación" xD no importa si quieres o no estudiar Python, no necesariamente necesita ser Python, con cualquier lenguaje se puede... eso si, solo pasaras algunos niveles si usas bien la cabeza y piensas antes de actuar (no vale buscar ayuda en el foro!!! :-P ).

Veamos hasta donde llego.

Dario Ocles.

jueves, julio 19, 2007

Jerarquía de las Excepciones en Python

Las Excepciones en Python son bastante fáciles de manejar y nos dan una forma muy buena de manejar los errores que pueden ocurrir en nuestros programas.
Hay que tener cuidado cuando se intenta atrapar algunas excepciones, siempre debes tratar de agarrar algún tipo especifico de excepciones y mucho mejor si son excepción definidas por ti. Cuando se intenta agarrar cualquier tipo de excepciones podemos estar enmascarando algún error grave en un "error previsto". Por el motivo anterior es bueno que conozcas la Jerarquía de las Excepciones en Python.
Un ejemplo del porque debes conocer lo anterior y tienes que tener cuidado es el siguiente:

  1. >>> while 1:

  2.     try:

  3.         numero = input("ingresa un numero: ")

  4.         if numero < 10:

  5.             raise Exception("ErrorNumerico", "No me gusto el numero.")

  6.         else:

  7.             raise Exception("ErrorNumerico2", "Tampoco me gusta este numero.")

  8.     except:

  9.         print "Se produjo un error y puede ser de cualquier tipo."


Si lo ejecutastes te darás cuenta que no hay forma de salir, ni con "Ctrl + D"!!!!... esto se debe a que lo anterior lanza una excepción KeyboardInterrupt y esta deriva, como todas las demás, de la clase BaseException y cuando intentas agarrar todas las excepciones con except sin argumentos atrapas todo aquello por debajo de BaseException.

Dario Ocles.

martes, julio 10, 2007

Aprender Python en pocos días

Por una cosa u otro nunca me puse a leer de manera sería alguna documentación de Python, simplemente leía la lista, algún capitulo de algo en concreto y dudas puntuales. Haces unos días (5 mas o menos) me propuse leer de punta a punta la Guía de aprendizaje de Python. Mi gran sorpresa es lo chica que es y lo rápido que se lee toda la guía. Con el poco tiempo que tengo ultimamente (muy poco por cierto) y sin dejar de lado ningún compromiso e incluso con varios inconvenientes pude leer toda la guía en pocos días. De más esta decir que aprendí mucho sobre el lenguaje y que si ya eres programador es bastante simple aprenderlo, además de lindo, fácil y poderoso.

Ahora voy por la Referencia de Bibliotecas... obviamente no será una lectura muy profunda ya que sería bastante larga y cuando termine no me acordaría de todo, lo que pretendo es tener el conocimiento de las cosas que hay disponibles y cuando haga falta usar alguna voy y profundizo.

Dario Ocles.

martes, julio 03, 2007

Intercambio de valores entre dos variables (Python)

Extendiendo el post anterior aquí pretendo mostrar lo mismo pero Python el lenguaje más "elegante" que conozco. En el post anterior hacemos uso de dos funciones que nos provee PHP pero no estamos utilizando una "propiedad" del leguaje mismo.

Unas de las cosas hermosas que tiene Python es la asignación multiple. Aquí, a diferencia del ejemplo anterior, no hacemos uso de funciones ni herramientas que nos da el lenguaje en Python hacemos uso de una caracteristica del lenguaje mismo. El código:

  1. >>> uno, dos = dos, uno

Dario Ocles.

domingo, junio 24, 2007

Problemas en GNU/Linux y ayuda de Python

Hace unos días instale un Debian Etch pero tengo un detalle con el sonido. El sonido me anda pero cuando escucho algo si intento bajar o subir el volumen me quedo totalmente sin el y debo hacerlo desde los propios parlantes. También tengo instalado un Ubuntu Dapper que hace rato no usaba. Como en Ubuntu no tube ningún problema y en Debian si se me ocurrio investigar. Primero quiero agregar que todaía no pude solucionar el problema pero investigando se me ocurrio que tal vez era algún módulo que no se cargaba por lo cual inicie en Ubuntu y después en Debian y en ambos ejecute:

# lsmod > lsmod_DISTRO.txt

Y con ayuda de python pude identificar aquellos módulos que en Debian no se cargaban y base estos datos seguí mi investigación (sin exito hasta la fecha). A continuación les dejo el código en Python que me ayudo a identificar los modulos que no se cargaban rapidamente.

  1. dario@debian:~/audio$ python
  2. Python 2.4.4 (#2, Apr 5 2007, 20:11:18)
  3. [GCC 4.1.2 20061115 (prerelease) (Debian 4.1.1-21)] on linux2
  4. Type "help", "copyright", "credits" or "license" for more information.
  5. >>> f1 = open('lsmod_debian.txt','r')
  6. >>> f2 = open('lsmod_ubuntu.txt','r')
  7. >>> debian = f1.readlines()
  8. >>> ubuntu = f2.readlines()
  9. >>>
  10. >>> mod_debian = []
  11. >>> for linea in debian:
  12. ... mod_debian.append(linea.split(' ')[0])
  13. ...
  14. >>> mod_ubuntu = []
  15. >>> for linea in ubuntu:
  16. ... mod_ubuntu.append(linea.split(' ')[0])
  17. ...
  18. >>> len(mod_debian)
  19. 58
  20. >>> len(mod_ubuntu)
  21. 88
  22. >>> for modulo in mod_ubuntu:
  23. ... if modulo not in mod_debian:
  24. ... print modulo
  25. ...
Dario Ocles.

viernes, junio 22, 2007

Composite Pattern en Python

En un post anterior muestro como implementar el patron Composite en PHP. Hoy implemente el mismo código pero en Python, solamente como un jercicio propio y para empezar a hacer algo en Python ya que no hago mucho, solo leo :-(

Ya que estoy remarco algunas cosas para el que no conozca Python. En python para marcar los bloques de código se hace por medio de la identación lo cual hace -obligadamente- el código más fácil de leer. Los puntos y las ">>>" que ven en el código es porque estaba trabajando con la consola interactiva de Python algo muy practico para probar cosas rapidamente.

Bueno, sin más preambulos les dejo el código (disculpen, no encontre como colorear el código :-( ):

  1. >>> class Grafico:
  2. ... def dibujar(self):
  3. ... pass
  4. ...
  5. >>> class Triangulo(Grafico):
  6. ... def __init__(self,nombre = 'unknown'):
  7. ... self.nombre = nombre
  8. ... def dibujar(self):
  9. ... print '-Soy triangulo ', self.nombre
  10. ...
  11. >>> class Contenedor(Grafico):
  12. ... def __init__(self, nombre = 'unknown'):
  13. ... self.nombre = nombre
  14. ... self.contenedor = []
  15. ... def dibujar(self):
  16. ... print 'Soy contenedor ', self.nombre
  17. ... for grafico in self.contenedor:
  18. ... grafico.dibujar()
  19. ... def agregar(self, grafico):
  20. ... self.contenedor.append(grafico)
  21. ... def sacar(self, grafico):
  22. ... if grafico in self.contenedor:
  23. ... self.contenedor.remove(grafico)
  24. ...
  25. >>> tri1 = Triangulo('1')
  26. >>> tri2 = Triangulo('2')
  27. >>> tri3 = Triangulo('3')
  28. >>> cont1 = Contenedor('1')
  29. >>> cont2 = Contenedor('2')
  30. >>> cont3 = Contenedor('3')
  31. >>> cont1.agregar(tri1)
  32. >>> cont1.agregar(tri2)
  33. >>> cont2.agregar(tri3)
  34. >>> cont3.agregar(cont1)
  35. >>> cont3.agregar(cont2)
  36. >>>
  37. >>> cont3.dibujar()
  38. Soy contenedor 3
  39. Soy contenedor 1
  40. -Soy triangulo 1
  41. -Soy triangulo 2
  42. Soy contenedor 2
  43. -Soy triangulo 3
Dario Ocles.