domingo, 27 de enero de 2013

Python en 3 días

Charles Severance AKA Dr. Chuck
Este blog está basado en su curso online

A quien le sirve este blog

Aprenda Python en tres días está dirigido principalmente a personas que ya saben algún lenguaje de programación y quieren conocer los fundamentos de Python de manera rápida y fácil. Se basa en el excelente curso online Python for Informatics del Dr. Charles Severance que está diseñado para aprender desde cero. En este blog supodré que ya se tiene alguna experiencia a como funcionan los computadores, que es un programa, una variable, etc. así es que no haré ninguna referencia a esos temas.

¿Puede servir este blog para alguien que no sepa nada de programación a aprender Python? Yo pienso que si, aunque tendrá que hacer un esfuerzo extra en buscar muchas cosas que aquí he omitido y doy por sabidas, creo que es un buen método para aprender a programar en Python desde cero, porque la secuencia de ejercicios está muy bien diseñada y cubre los problemas fundamentales de la programación. Con estas herramientas más frecuentes consultas en Internet para problemas específicos, creo que cualquiera queda en condiciones de empezar a producir código útil.

Nota importante: este curso se encuentra en Udemy, en video, donde los ejercicios están mejor explicados. El curso cuesta US$ 19.00.- El contenido es el mismo.

El método

El método es completamente opuesto a como se enseña tradicionalmente. Aquí no se dan problemas para que el alumno los resulva sino que se muestra el código ya escrito, el problema resuelto y se explica muy brevemente como funciona. Como Python tiene una sintaxis muy clara y auto explicativa, creo que es el método más fácil y rápido.
Igual como un bebe no aprende a hablar memorizando palabras y luego estudiando la gramática para ennlazarlas, sino que imitando las frases completas que escucha, el método usado aquí es similar: ahorrar el trabajo de pensar y más bien mostrar los problemas solucionados, explicando como funcionan y alentando a que el alumno explore soluciones alternativas.

Como instalar Python

Las instrucciones para instalar Python en nuestro computador se encuentran en este link del sitio del Dr. Chuck, están en inglés y son bien detalladas, lo siento pero me dió flojera traducirlas, tal vez más adelante lo haga.

Como empezar

Una vez que tengan instalado todo en la carpeta c:\Python27 estarán en condiciones de comenzar a programar. Existen varias maneras de correr un programa en Python, por ejemplo usando el programa Idle que permite escribir el código y ejecutarlo. Yo recomiendo que después de instalar Python descarguen el programa Notepad++ y lo usen para escribir sus programas. Para ejecutarlos lo pueden hacer desde la consola de su computador, por ejemplo en Windows 7 van a Start y en la ventana de comandos colocan cmd. Luego se mueven usando cd (carpeta) a donde escribieron su programa, por ejemplo si lo guardaron en el escritorio tendrían que hacer cd desktop (o cd escritorio dependeindo del idioma). Luego lo ejecutan colocando el nombre completo, por ejemplo prueba1.py.

Como en todos los lenguajes interpretados, los programas en Python son simples archivos de texto, se reconocen como programas porque al grabarlos su nombre debe tener la extensión py, por ejemplo prueba1.py. Así si tienen grabado un archivo con ese nombre y tienen el interprete Python instalado, este lo reconoce automáticamente y lo ejecuta.


Sin más trámites, suponiendo que ya instalaste Python según las instrucciones, te invito a que pases al día 1. para que en 3 días más seas un programador Python.  En los ejemplos que se muestran el código aparece tal como se escribiría usando Notepad++ así es que no hay que escribir los números de línea

Opcional: Clase de introducción del Dr. Chuck (Youtube)


DIA UNO

1.-Hola Mundo

El programa que todo aprendiz de lenguaje debe hacer primero que nada, para ser bendecido por los dioses de los lenguajes, dice como escribir en la pantalla usando print, Guardarlo con el nombre prueba1.py Prueba: al colocar prueba1.py en la consola debe aparecer la línea Hola Mundo


2.-Pregunta el nombre, lo guarda en una variable y lo muestra en pantalla, un Hola Mundo un poco más sofisticado. Para entrar datos se usa variable=raw_input("Prompt")
Prueba: al colocar prueba2.py en la consola debe preguntar "Enter Name" si entramos Pepe debe aparecer la línea Hola Pepe

las variables ingresadas con raw_input son por defecto strings (literales) se pueden convertir a número decimal con var-numerica=float(nombre_variable_string). Para otros tipos de variables consultar la documentación. Python es case-sensitive para todo, es decir que mayúsculas y minúsculas si importan, por ejemplo Valor y valor son dos nombres de variable diferentes, si colocan PRINT o Print en lugar de print aparecerá un error.


3.-Pregunta variables, convierte algunas a número, hace operaciones y muestra resultado
Prueba: al entrar 45 horas a un rate de 2.75 debe aparecer el resultado de 123.75
Opcional: Clase del Dr. Chuck sobre expresiones(Youtube)


4.-Decide según si una condición se cumple, este ejercicio pide entrar un número decimal (nota en el sistema americano, un decimal entre 0 y 1) y colocar su equivalente en letra A,B,C,D,E,F si el número es mayor que 1 o menor que 0 dice que está mal e ingrese de nuevo
Prueba: al entrar un score de 0.95 debe aparecer la letra A

La instrucción es if (condición) : Los dos puntos equivalen a "then " (entonces) en otros lenguajes, es decir el significado es "si se cumple la (condición) entonces haga lo que viene abajo indentado"
La instrucción elif corresponde al else o else if de otros lenguajes, es decir "si la condición anterior no se cumplió entonces pruebe con esta"
La indentación (tabs o espacios de 4 blancos) es muy importante en Python porque indica donde se cierran los ciclos, se usa en if, for, while y otras instrucciones como veremos más adelante

Opcional: Clase del Dr. Chuck sobre expresiones condicionales(Youtube)


5.-Escribir una función, código que se usa frecuentemente en distintas ocasiones se puede escribir como una función, esta función es llamada y retorna un valor
Prueba: al entrar 45 horas a un rate de 3 por hora debe dar como resultado 120+22.5 es decir 142.5

Las funciones comienzan con def y terminan con return. En este ejemplo la función computerpay calcula si las horas trabajadas son más de 40 las horas en exceso las multiplica por un factor de 1.5 (horas extraordinarias). Luego se entra las horas trabajadas y la tarifa por hora, se convierten las variables a números decimales (float) y para hacer el cálculo se llama a la función
Opcional:Clase del Dr. Chuck sobre funciones(Youtube)


DIA DOS


6.-leer una lista e imprimir el número más grande

Las listas en Python son muy potentes. Se denotan por paréntesis cuadrados y los valores van separados por comas, una lista puede contener otra lista como elemento. las listas tienen muchas funciones útiles y una de las mejores es slice que convierte un string delimitado en una lista. Por ejemplo tenemos el string stringdenombres="Perdo Juan Diego" usando slice podemos crear una lista con lista=stringdenombres.split() que sería [Pedro, Juan, Diego]. Usaremos esa función más adelante. En este caso el criterio para delimitar son los espacios en blanco, pero podría ser cualquier otro caracter como coma, dos puntos, etc. Basta con ponerlos dentro del paréntesis de split, por ejemplo lista2=textostrings.split(",")
Los strings (serie de caracteres como "ESTE ES UN STRING") y las listas son tratados de manera similar en Python, ambos son "secuencias", se puede pasar de string a lista con facilidad usando split
Opcionales:Clase del Dr. Chuck sobre listas(Youtube) Clase del Dr. Chuck sobre Archivos(Youtube) Clase del Dr. Chuck sobre iteraciones



7.-Entrar datos con un loop, escoger el mayor y el menor de una serie de números al azar entre 1 y 10000

Prueba: entrar los valores 8,4,9,2,0,6,5,done deberá aparecer Maximum is 8 Minimum is 0

En este ejemplo se usa un ciclo que se repite indefinidamente con la instrucción while True: recuerden que los dos puntos equivalne a "entonces" la instrucción explicada en palabras es "repita todo lo que viene a continuación indefinidamente, cuando llegue a la última instrucción, vuelva al principio". Antes de el ciclo se inicializan dos variables max con un valor muy pequeño -1 y min con un valor muy grande 10000, en estas variables se iran guardando los valores mínimos y máximos encontrados y se inicializan con estos valores para asegurarse que desde la primera vuelta del ciclo almacenen un valor examinado (que nunca será menor que -1 ni mayor que 10000).

Luego pide al usuario que entre cualquier número usando raw_input. Si en lugar de entrar un número se entra la palabra done el ciclo se termina y salta a las dos últimas instrucciones (recuerden que la indentación marca adonde se repite el ciclo, brak es la instrucción para salir de un ciclo hacia el final.
Las instrucciones try y except son una trampa de error que revisan si la entrada fue un número de punto flotante (decimal) si no es (dato erróneo) continúa con el ciclo sin ejecutar las instrucciones de abajo, mediante la instrucción continue.

Los dos if siguientes almacenan el valor máximo y mínimo, comparando el valor anterior que tenían con el valor nuevo, si su valor anterior de max es menor que el nuevo entonces lo guardan en max, si el valor anterior de min es mayor que el nuevo entonces lo almacenan en min.


8.-Buscar una línea de caracteres en un archivo de texto Para este ejercicio hay que descargar el archivo de texto mbox-short.txt y almacenarlo en la misma carpeta donde se guarda el programa, este archivo contiene una serie de emails donde hay que identificar las líneas que comienzan con el string "X-DSPAM-Confidence:", luego se identifica en que posición están los dos puntos (colon en inglés) y se extraen los 40 caracteres que están a la derecha de los dos puntos, se transforma el string leído a punto flotante, se suman los números leídos, se cuentan cuantas líneas se seleccionaron y se calcula el promedio (suma de los números dividido por número de líneas)


DIA TRES


9.-Identificar y separa una porción de strings en un archivo de texto que tengan cierta característica, almacenarlos en una colección e indicar cuantas veces aparecen los string que se repiten, Este ejercicio toma el mismo archivo de texto mbox-short.txt que contiene varios email en su formato crudo, original el código es este
En este caso el problema usa un diccionario (cou) y una lista (correos), que se inicializan vacíos en las líneas 3 y 4. la solución en este caso se dividió en tres partes: Entre las líneas 7 y 10 se llena la lista correos con las direcciones de email que se extraen de mbox-short.txt, para esto se revisa cada línea del archivo y si empieza con "From:" entonces lo que viene es una dirección de correo, pero en la línea hay otras informaciones además de la dirección de correo así es que se usa split para transformar la línea (string) en una lista llamada words, en la línea se agrega a la lista correos el segundo elemento de word (en Python el primer elemento es 0 y el segundo 1), en este caso es solo la dirección de correos. Con eso formamos la lista que extrajo todos los correos del archivo.
Opcional:Clase del Dr. Chuck sobre diccionarios(Youtube) Clase del Dr. Chuck sobre tuplas(Youtube)

Entre las líneas 11 y 17 generamos un diccionario llamado cou. un diccionario también es una secuencia, pero a diferencia de una lista tiene dos elementos: una clave y un valor.. En nuestro caso la clave será la dirección de correo y el valor las veces que se repite. Las líneas 13 a la 17 acumulan los valores repetidos para cada correo (clave) en un diccionario, con lo que queda una lista del tipo cou={"pedro@cti.com": 4, "juan@cbs.cl": 3, "diego@aol.com",45} nótese que los diccionarios se anotan con paréntesis de llave y las listas con paréntesis cuadrados, las listas tienen elementos de a uno en uno separados por comas, mientras los diccionarios tienen conjuntos de dos elementos separados por comas, un elemento es la clave y el otro su valor. Se puede entender una lista como una línea o una columna de valores en excel, mientras que una colección tiene un nombre y un valor asociado a ese nombre. El nombre (clave) no cambia pero el valor puede cambiar.

Entre las líneas 20 y 27 se selecciona y se imprime el mayor valor y la dirección de mail a que está asociado.


10.-Crear una colección y ordenarla por valor en lugar de clave. Usando el mismo archivo mbox-short.txt del ejercicio anterior se trata de crear un diccionario que acumule direcciones de email y cuantas veces aparecen en un diccionario, de manera similar al ejercicio anterior. Luego se crea una tupla, que es similar a una lista pero sus valores no cambian (como una lista de constantes), la ventaja de las tuplas es que pueden usarse como almacenamiento temporal para cambiar el orden clave-valor de un dicionario (las claves pasan a ser valores y viceversa). esto permite reordenar el contenido del diccionariopor valores, el código es este
Las líneas de código van comentadas, la línea 10 para acumular valores en un diccionario usando get es un método muy útil y compacto de acumular valores de una misma clave en una colección, en el ejercicio anterior se mostró un método más largo con fines pedagogicos.

Y eso amigos sería todo, creo que si alguien hace estos 10 ejercicios copiando y pegando el código, ejecutando e intercalando print en los lugares adecuados para ver que valores van tomando las variables, y si después de eso llega a entender como funciona cada uno de los 10 programas, estará en condiciones de empezar a escribir código en Python, y cuando le aparezcan dudas específicas no le quedará otra alternativa que consultar el manual en Internet o donde sea. Pero en estos 10 ejercicios está lo que yo creo que es fundamental para empezar.

Y para terminar un disclaimer: aunque yo hice todos los problemas del curso del Dr. Chuck correctamente, no estoy seguro si los códigos que incluyo están perfectos. Si alguien encuentra un error que me avise para felicitarlo y corregirlo.

P.D. Mis cursos en UDEMY. Tengo publicados varios video-cursos en UDEMY que pueden ver aquí   el curso Python Acelerado es una versión de esto mismo pero en video y pagado.

5 comentarios:

  1. Me reclamó por los espacios, tal vez debas buscar una forma mejor de publicar los snippets de códigos (se veía no identado el "return", pero tenía que ser identado)

    Algo así como
    http://infotilla.com/add-code-snippet-block-in-your-wordpress-and-blogspot-blog-posts/
    podría ser.

    ResponderEliminar
  2. Es un problema que he tenido siempre para colocar código en blog, muy buen dato!, lo del return era un error mío ya lo corregí.
    En general pueden haber problemas cuando uno hace copy-paste por la distinta codificación que afecta a los tabs.

    Los ejemplos del día 3 yo los encontré excelentes, muestran lo poderoso que es Python para manipular bloques de texto usando diccionarios, funciones de string a listas y expresiones regulares. Ya los voy a subir

    ResponderEliminar
  3. Buenas, muy útil tu entrada, me ha servido mucho para refrescar conceptos. No obstante he visto dos erratas en el ejercicio 8 del "día 2". Te comento: Primero haces un raw_input de fname y acto seguido machacas el valor del fname. Entonces ese raw_input sobra. Por último veo que haces un casting a float de pos para luego usarlo como índice, pero eso no se puede hacer, puest que debería de ser entero sí o sí (por lo que esa línea también sobra).

    Saludos y muchas gracias por la entrada, genial aporte :-)

    ResponderEliminar
  4. Hola Sebastian, muchas gracias por las correcciones. Eres la segunda persona que lo menciona y por flojera no lo había arreglado, encontrar errores o ineficiencias en el código es un buen entrenamiento, en este caso los dos que bien señalas.

    La idea es justamente refrescar conocimientos y actualizar para los que vienen de otro lenguaje tengan una introducción rápida a Python, sin tanto formalismo, los ejercicios fueron muy bien escogidos por el Dr. Chuck, por eso me llamaron la atención y decidí ponerlos en este mini-curso

    ResponderEliminar
  5. This Course on Tableau Training will get you up to speed on concepts of data visualization with a firm understanding of Tableau Architecture.
    http://bigclasses.com/tableau-online-training.html

    ResponderEliminar