Proyectos 2011: Iniciando con Python

Ya que la Lulu bloggera ha vuelto en sí, se pone a actualizar:

Estoy saliendo de mis inolvidables funciones en el Ministerio de Cultura y entrando a un proyecto de simulación en el área de bioquímica. Para esto, uno de los primeros pasos es aprender Python y C++, que se necesitarán para manejar los simuladores. Felizmente, mis amigos bash y pl/sql han salido a apoyarme en este proceso de aprendizaje.

Estoy utilizando “How to Think Like a Computer Scientist – Learning with Python”, de Jeffrey Elkner, Allen B. Downey, y Chris Meyers. Un libro muy claro, muy didáctico, aunque con pocos ejercicios/retos. Para los que les interese:

Python 2.7 (r27:82500, Sep 16 2010, 18:03:06)
[GCC 4.5.1 20100907 (Red Hat 4.5.1-3)] on linux2

Mis primeras impresiones del lenguaje:
1) Me encanta la función de los dos puntos (:). Lo hace tan humano!
2) Se presta bastante a la economía.
3) ¿Por qué no compara caracteres en general y sólo int?
4) Un IndentationError me hace pensar que es bellamente delicado. No apto para desordenados.

Lo que posteo más abajo es una especie de resumen y adaptación de ejemplos y ejercicios del libro, hasta el final del capítulo 4. Quizá a alguien le sea útil… y quizá alguien me recomiende!!!!


#Definir una función llamada compare, que tome dos argumentos y compare cuál es mayor. Si no hay diferencia, debe igualarlos. Esta comparación funciona para int, no para str.

>>> def compare(x,y):
...   if x > y:
...     print x, "es mayor que",y
...   elif x < y:
...     print x, "es menor que",y
...   else:
...     print x, "es igual a", y

#Definir una función que llame a otra, según uno seleccione. Primero creamos las tres funciones que fungen como opciones. Demostramos que la comparación no aplica para str.
>>> def regalo1():
...   print "Un helado de chocolate."
...
>>> def regalo2():
...   print "Un libro de Oscar Wilde."
...
>>> def regalo3():
...   print "Un t-shirt de tu banda favorita."

def yoquiero(x):
    if x == 1:
      regalo1()
    elif x == 2:
      regalo2()
    elif x == 3:
      regalo3()
    else:
      print "Lo que quieres no está disponible."

#Ahora probamos nuestra función:

>>> yoquiero(2)
Un libro de Oscar Wilde.

>>> yoquiero(x)
Traceback (most recent call last):
  File "", line 1, in
NameError: name 'x' is not defined

>>> yoquiero(6)
Lo que quieres no está disponible.

#Podemos también anidar (nested conditionals). Esto se debe evitar, pues toma más tiempo leerlos.

def anidada(x,y):
  if x == y :
    print x, "es igual a", y
  else:
    if x > y:
      print x, "es mayor que", y
    else:
      print x, "es menor que", y

#Probemos nuestra función:

>>> anidada(2,3)
2 es menor que 3
>>> anidada(2,2)
2 es igual a 2
>>> anidada(3,2)
3 es mayor que 2

#Importamos los módulos de funciones matemáticas, potque estaremos utilizando funciones divertidas.

>>> import math

#Utilizamos ahora el enunciado return, que permite terminar la ejecución de la función antes de terminar.

def logaritmo(x):
  if x <= 0:
    print "Error de dominio. Ingrese un número positivo mayor de cero."
    return
  resultado = math.log(x)
  print "El logaritmo de x es", resultado

#Probamos nuestra función:

>>> logaritmo(3)
El logaritmo de x es 1.09861228867
>>> logaritmo(0)
Error de dominio. Ingrese un número positivo mayor de cero.
>>> logaritmo(-2)
Error de dominio. Ingrese un número positivo mayor de cero.

#Entrando a la magia: funciones recursivas. Haremos el típico ejemplo de cuenta regresiva, esta vez de 2 en 2 (gadejo). Veremos además qué sucede al establecer una recursividad infinita.

def conteoregresivo(x):
  if x == 0:
    print "Ceroooooo!!!!!"
  else:
    print x
    conteoregresivo(x-2)

#¡Probemos la función!

>>> conteoregresivo(0)
Ceroooooo!!!!!
>>> conteoregresivo(4)
4
2
Ceroooooo!!!!!

#Vamos con la infinita!

def conteoinfinito(x):
  print x
  conteoinfinito(x+1)

#Al ejecutarla, contó hasta 999 y luego se puso a rastrear. El error final fue:

File "", line 4, in conteoinfinito #Esto repetido muchas veces.
RuntimeError: maximum recursion depth exceeded

#Entrando a la interacción, incorporaremos  la lectura de datos suministrados por el usuario. Modifiquemos la función anterior del regalo...

def regaloa():
  print "Un helado de chocolate."

def regalob():
  print "Un libro de Oscar Wilde."

def regaloc():
  print "Un t-shirt de tu banda favorita."

def yoquiero2():
  x = raw_input ("¿Qué te regalo? Selecciona una de estas tres letras: a, b, c:  ")
  print x
  if x == "a":
    regaloa()
  elif x == "b":
    regalob()
  elif x == "c":
    regaloc()
  else:
    print "Lo que quieres no está disponible."

#¡A probar!

>>> yoquiero2()
¿Qué te regalo? Selecciona una de estas tres letras: a, b, c:  c
c
Un t-shirt de tu banda favorita.

#Utilizaremos ahora \n para agregar una línea al prompt del usuario. Por ahí recomiendan que los inputs sean str, y que se utilice una función de conversión, para evitar errores. Es algo más o menos así:

 def yoquiero3():
  x = raw_input ("¿Qué te regalo? Elige un número del 1 al 3 \n")
  print x
  str(x)
  if x == "1":
    regaloa()
  elif x == "2":
    regalob()
  elif x == "3":
    regaloc()
  else:
    print "Lo que quieres no está disponible."

#Probando:

>>> yoquiero3()
¿Qué te regalo? Elige un número del 1 al 3
3
3
Un t-shirt de tu banda favorita.

#Veamos qué sucede si no convertimos:

def yoquiero4():
  x = raw_input ("¿Qué te regalo? Elige un número del 1 al 3 \n")
  print x
  if x == 1:
    regaloa()
  elif x == 2:
    regalob()
  elif x == 3:
    regaloc()
  else:
    print "Lo que quieres no está disponible."

#Siempre me sale:  "Lo que quieres no está disponible."

Un pensamiento en “Proyectos 2011: Iniciando con Python

Tell me what you think!

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s