Los pilares de
PYTHON @RUBENRUIZ_T
Índice #1 (pág. 3) Propósito del libro: Comentamos de forma breve el objetivo del libro el cual enfatice los más importante del lenguaje dejando de lado las florituras. #2 (pág. 5) Los lenguajes de programación y Python: Hablamos sobre qué son los lenguajes de programación, los tipos, cuantos hay, cual es el mejor y veíamos un ejemplo de las diferentes sintaxis (Python, C++ y JavaScript) #3 (pág. 8) Breve historia y características: Características del lenguaje Python. #4 (pág.10) La instalación con Anaconda: Instalamos el entorno de desarrollo Anaconda. #5 (pág.17) Un vistazo a Anaconda y Spyder: Echamos un vistazo rápido al entorno Anaconda y al IDE Spyder. #6 (pág. 22) Las variables I: La lógica detrás. Comentamos como se declaran las variables en Python y lo que ocurre detrás de bambalinas. #7 (pág. 25) Las variables II: datos simples: Hablamos sobre los datos simples (integers, float, strings y booleans). #8 (pág. 29) Las variables II: listas y slicing. Escribimos en profundidad con los datos compuestos y en concreto las listas y el slicing. #9 (pág. 36) Las variables II: Diccionarios. Hablamos sobre los diccionarios, los cuales se utilizan para guardar relaciones entre “algo” y “algo” conocidos como clave (key) y valor (value) #10 (pág. 38) Las variables II: Tuplas. Escribimos sobre las tuplas las cuales son secuencias ordenadas no manipulables que almacenan diferentes. #11 (pág. 40) Las variables II: Conjuntos. Tratábamos el último de los tipos de datos compuestos, los conjuntos, los cuales permiten realizar aquellos olvidados ejercicios de teoría de conjuntos que hacíamos en las clases de probabilidad de matemáticas. #12 (pág. 47) Las variables II: Resumen. Hacíamos un resumen de los cuatro tipos de datos compuestos (las listas, los diccionarios, las tuplas y los conjuntos). #13 (pág. 49) Los operadores: Tratamos los símbolos +, - , * , / , % , = , < , > , or , and y muchos más. #14 (pág. 52) Flujo de ejecución (Loops y Condicionales): Uno de los capítulos más importantes y la esencia de la programación. El uso de los bucles for y los condicionales if. #15 (pág. 59) El scope: Escribimos sobre el alcance de las variables, las que pueden ser de alcance local o global. #16 (pág. 60) Las librerías: Escribimos el concepto de librería o modulo con un ejemplo práctico. #17 (pág. 63) Capturar errores: Tratamos como capturar los errores con Try y Except. #18 (pág. 67) Introducción a clases: Terminamos con una introducción a la POO y a las clases. #19 (pág. 70) Resumen: Resumen del contenido. #20 (pág. 72) Fin ¿y ahora qué?: Abordamos nuestra siguiente etapa.
3
1. Propósito del libro “UN
VIAJE
DE
MIL
MILLAS
COMIENZA LAO TSE
CON
UN
PRIMER
PASO”
Nos encontramos en el año 2018, era de la explosión de la Inteligencia Artificial tras el aumento del procesamiento computacional, el crecimiento exponencial de los datos y la facilidad de compartir la información. Aquellos algoritmos de redes neuronales y Machine Learning que estaban en los libros cubiertos por el polvo, por fin salen a la luz al calor de la inversión empresarial. Ante dicho panorama no dejan de crecer las ofertas de trabajo como Data Science o científico de datos, Big data specialist o software developer. Incluso, algunas empresas empiezan a pedir como requisito imprescindible conocimientos de programación. Ya no es suficiente hablar inglés y utilizar Microsoft office. Estamos en el año 2018 donde tener conocimientos de programación es recomendable y atisba un futuro en el cual será obligatorio. Ante dicho panorama, trabajando en el sector de Inteligencia Artificial en la industria financiera, ganas de devolver a la comunidad lo recibido en forma de software libre y un verano por delante parece que es la combinación perfecta para escribir un libro de introducción a Python.
4
1. Propósito del libro Ante dicho panorama, trabajando en el sector de Inteligencia Artificial en la industria financiera, ganas de devolver a la comunidad lo recibido en forma de software libre y un verano por delante parece, que es la combinación perfecta para escribir un libro de introducción a Python. ¿Cuál es la diferencia entre este libro y los cientos que hay en el mercado sobre Python y la programación ? Imagina que quieres enseñar tu idioma a un amigo extranjero. ¿Le darías una enciclopedia para comenzar a desenvolverse? Pues el 90% de los cursos, libros y manuales de introducción que hay ahí fuera son publicaciones que nada tienen que envidiar a nuestra amiga Espasa. ¿Qué sentido tiene que un libro de “introducción” a un lenguaje tenga 400 hojas? Personalmente, comparo la programación a hablar, ya que lo que estamos haciendo realmente es comunicarnos, aunque sea con una máquina y no una persona y de la misma forma que no es necesario estudiar una filología hispánica para hablar castellano, tampoco es necesario leer un libro de más de 200 páginas para empezar a programar. Este es aquel libro que me hubiera gustado encontrar cuando empecé, aquel centrado en lo más básico, práctico e importante, dejando de lado las florituras utilizadas muchas veces meramente con el objetivo de aumentar el ego de los propios programadores.
5
2. Los lenguajes de programación y Python. “DIME
Y
LO OLVIDO, ENSÉÑAME Y LO RECUERDO, INVOLÚCRAME Y LO APRENDO.” BENJAMIN FRANKLIN
Antes de explicar las razones por las que hemos elegido Python como el lenguaje de programación perfecto para empezar a programar, deberíamos de definir. ¿Qué son los lenguajes de programación? Un lenguaje de programación no es más que la forma básica de comunicación con una máquina. Al igual que utilizamos el inglés, español o francés para hablar con alguien, debemos utilizar un lenguaje de programación si queremos comunicarnos con una máquina.
6
2. Los lenguajes de programación y Python. ¿Qué tipos de lenguajes de programación hay? Dentro de los lenguajes de programación existen los conocidos como alto nivel y bajo nivel. Los de bajo nivel son aquellos cercanos al lenguaje máquina, permiten más control y suelen ser más rápidos en la ejecución del programa. Sin embargo, requieren más conocimientos por parte del programador, suelen requerir escribir más comandos y no son tan claros en su lectura. Siguiendo con nuestro símil entre los lenguajes de programación y los idiomas, podríamos decir que hay lenguajes con una gramática más elaborada como puede ser el polaco o el ruso (bajo nivel), sin embargo expresan las mismas ideas que alguien que habla inglés (alto nivel). Es cierto, que gramaticalmente, tanto el polaco como el ruso presentan un mayor control a nivel gramatical en comparación con el inglés. Pero, ¿no están expresando ambos las mismas ideas? Saliendo del símil, Python sería el idioma inglés y lenguajes de programación como C++ o Fortran son de bajo nivel.
¿Cuántos lenguaje de programación hay? Al igual que idiomas en el mundo, hay literalmente cientos. Por lo que escogeremos aquel que reúna las condiciones de estar más extendido internacionalmente, que sea fácil de aprender, pero a la vez potente. ¿ Si tuviéramos que elegir algún idioma así nos viene a la cabeza el inglés verdad?
¿Cuál es el mejor lenguaje de programación? Al igual que puedes escribir un libro, comprar el pan o pedir un taxi en cualquier idioma lo mismo ocurre con los lenguajes de programación. Por lo tanto, no existe el “mejor lenguaje” de programación. Sin embargo, sí que hay lenguajes de programación optimizados a realizar una tarea en concreto, ya sea por la propia estructura del lenguaje o debido a que la comunidad (a.k.a gente que comparte un lenguaje de programación) ha invertido tiempo en diseñar programas (técnicamente hablo de las librerías y frameworks los cuales detallaremos más adelante) que ayudan al resto a realizar una tarea. Entonces, se podría decir que los lenguajes se perfilan o encasillan en ciertas funciones a lo largo del tiempo.
7
2. Los lenguajes de programación y Python. ¿Qué es la sintaxis de un lenguaje de programación ? La sintaxis de un lenguaje de programación significa lo mismo que la sintaxis de cualquier idioma de los que utilizamos día a día. Ya que el concepto de representar una idea es el mismo, lo único que cambia es la forma de decirlo.Ejemplo de humano a humano: “Quiero comprar pan”: Español: Quiero comprar pan Ingles: I want to buy bread. Chino: 我想买面包 Ejemplo de humano a máquina: Mostrar por la pantalla “Hello, world!”: C++: #include int main() { std::cout << "Hello, world!"; return 0; } JavaScript: console.log('Hello, world!'); Python: print ("Hello, world!") Como podemos ver, lo importante al final es la idea que tenemos en la cabeza y usar el lenguaje con el que nos sintamos más cómodos para llevarla a cabo. Como vemos podemos decir lo mismo escribiendo menos y de una forma más clara. Por eso se dice que Python tiene una sintaxis sencilla. ¿Por qué Python? Después de esta introducción a los lenguajes de programación podemos resumir que Python es el lenguaje más aconsejable para cualquier persona que quiera comenzar a programar debido a que presenta la mejor combinación entre sencillez sintaxis, velocidad de ejecución de los programas, activa comunidad y alta demanda en el ámbito tanto académico como empresarial. Una vez hayamos terminado y entendido bien los fundamentos de la programación, dependiendo de la especialización deseada por el lector o lectora, será más útil aprender uno u otro lenguaje. Sin embargo, la forma de razonar y las bases seguirán siendo las mismas.
8
3. Breve historia y características “APRENDER
SIN
REFLEXIONAR ES MALGASTAR CONFUCIO
LA
ENERGÍA .”
A pesar de que el nombre de Python nos recuerde al conocido reptil, el nombre que eligió su fundador, Guido van Rossum, en 1991 fue como consecuencia de uno de sus shows preferidos de la BBC, Monty Python. Actualmente es utilizado por miles de compañías y millones de programadores principalmente por las siguientes características: 1- Es un lenguaje gratuito, fue creado bajo la licencia de software libre. Es decir, que cualquier persona puede distribuir copias del software, realizar cambios o leer su código fuente. 2 - Es un lenguaje interpretado: Hay lenguajes de programación como C o C++ que son convertidos a binario (0 y 1) utilizando lo que se conoce como un compilador. Sin embargo, Python no necesita dicho compilador y convierte el código fuente en un código intermedio llamado bytecode. Este “detalle” significa un ahorro de tiempo a la hora de evitar tener que compilar el programa y asegurarnos que las librerías están correctamente cargadas con nuestro compilador.
9
3. Breve historia y características 3 - Es un lenguaje multiparadigma, es decir que para afrontar un mismo problema puedes utilizar varios “enfoques” o “estilos de programación”. 4 - Integrable: Como si de una pieza de Lego se tratara puede unir partes escritas en Python con otros lenguajes de programación como C++ y así obtener lo mejor de los mundos. 5 - La gran comunidad (personas que programan en el mismo lenguaje) hace que cualquier problema al que te puedas enfrentar haya sido probablemente ya resuelto por otra persona evitándote más de un dolor de cabeza. Como consecuencia directa hay un gran número de librerías o programas creados por otros usuarios con el objetivo de simplificar alguna tarea. 6 - Sintaxis simple: Como ya habíamos visto en el anterior capítulo, la sintaxis de Python es probablemente una de las más simples y fáciles de entender todos los lenguajes de programación aumentado la agilidad para leer y escribir código. Finalmente, antes de empezar a escribir código, hay que advertir que actualmente Python se encuentra en un momento de transición. Al igual que paso en el año 2000 cuando los países europeos circulaban las monedas euro y locales a la vez, en Python convivimos con la versión de Python 2 y su equivalente más moderno Python 3. A finales de 2020 Python dejará de dar soporte la versión Python 2. Lógicamente, en este libro trabajaremos únicamente sobre la versión de Python 3.
10
4. La instalación con Anaconda “LO
MÁS
DIFÍCIL
DE
APRENDER EN LA VIDA ES QUÉ PUENTE Y QUÉ PUENTE HAY QUE QUEMAR.” BERTRAND RUSSEL
HAY
QUE
Antes de comenzar con la instalación de Anaconda, debemos definir dos conceptos: las librerías o paquetes y los IDE o entornos de desarrollo integrado. Las librerías son programas escritos por la comunidad (personas como tú o como yo que escriben en el mismo lenguaje de programación) enfocados en ayudarte en ciertas tareas más concretas fuera de las funciones comunes que vienen integradas en Python. Por ejemplo, la librería numpy está enfocada en el cálculo vectorial, la librería pandas simplifica el proceso de tratar con bases de datos y tablas o la librería seaborn la cual es útil para visualización de datos). Hay miles de librerías de Python. Sin embargo, lógicamente no hay que utilizar todas, hay 20 que son utilizadas en más del 80% de los proyectos. Por ejemplo, en mi trabajo con Inteligencia Artificial en finanzas utilizamos: numpy, pandas, seaborn, Scikit-learn (como librería de machine learning), dask (si la cantidad de datos es alta) y numba (para mejorar el tiempo de ejecución).
CRUZAR
11
4. La instalación con Anaconda Los IDE o Entorno de desarrollo integrado: Los IDE no son nada más y nada menos que el lienzo y los pinceles que utiliza un artista para pintar su obra. Los IDE tienen funciones de autocompletado, que nos sugieren la función que debemos utilizar, herramientas de control de errores o debugging y algunos disponen de visualizador de variables. En resumen, son programas que nos ayudan a trabajar. Lo normal es que ahora pienses, ¿cómo puedes saber que librerías tengo que instalar o que IDE utilizar si ni siquiera hemos empezado a programar ? Pues aquí es donde entra en acción Anaconda. Anaconda según Wikipedia: Anaconda es una distribución libre y abierta de los lenguajes Python y R, utilizada en ciencia de datos, y aprendizaje automático. Con nuestras palabras, es un archivo de alrededor 500 MB que nos simplifica la vida al contener las librerías más utilizadas actualmente, avisarnos de sus actualizaciones y traer incorporado un IDE llamado Spyder. Además, Anaconda incluye otro lenguaje de programación llamado R y su respectivo IDE (R Studio). Dicho lenguaje está más orientado al análisis de datos y no es el objetivo del presente libro.
12
4. La instalación con Anaconda Normalmente, si alguien lee cualquier libro o manual de hace unos años, el procedimiento de instalación de Python era el siguiente: 1- Descargar la última versión de Python compatible con tu sistema operativo desde la página web de www.python.org 2 - Instalar Python. 3 - Instalar las librerías que pensamos que vamos a utilizar. 4 - Descargar el IDE o interfaz de entorno de desarrollo. Anaconda es una de esas herramientas que siguen la filosofía de Python de no reinventar la rueda. La instalación de Anaconda es igual de fácil que la instalación de un programa o videojuego. 1- Nos dirigimos a https://www.anaconda.com/download/
13
4. La instalaciรณn con Anaconda 2- Hacemos clic en descargar en funciรณn a nuestro sistema operativo (Windows, macOS o Linux) y si es 32 o 63 bits. 3- Continuamos como cualquier instalaciรณn:
14
4. La instalaciรณn con Anaconda
15
4. La instalaciรณn con Anaconda
16
4. La instalación con Anaconda Con estos simples pasos ya tenemos todo listo para empezar a programar. Os veo en el siguiente capítulo donde hablaremos ligeramente de anaconda y el IDE que vamos a utilizar Spyder. Para comprobar que la instalación ha finalizado correctamente, al darle a Anaconda debería de salir una imagen como la siguiente:
17
5. Un vistazo a Anaconda y Spyder “EL
PROBLEMA DE APRENDER DE LA EXPERIENCIA ES QUE NUNCA TE GRADÚAS” DOUG LARSON.
En el capítulo anterior explicábamos las librerías, los IDE y descargamos el paquete Anaconda, el cual nos iba a simplificar la vida. Pero antes de adentrarnos a escribir código, echaremos un vistazo a Anaconda y Spyder. Cuando abres Anaconda, aparecen una serie de rectángulos donde se encuentran los programas que ya vienen instalados dentro de la plataforma. Es probable que algunos componentes no estén instalados todavía en tu distribución, pero no te preocupes, nosotros únicamente vamos a utilizar el IDE de Python, Spyder.
18
5. Un vistazo a Anaconda y Spyder Haz clic en “ launch ” y tendrías que ver una pantalla parecida a esta:
Posiblemente tengas algunos paneles en distinto orden o incluso otros paneles, pero no hay problema. Los paneles se pueden mover fácilmente si los arrastras y puedes añadir nuevos si le das a la pestaña de arriba “ver”. Personalmente, a modo de guía, trabajo con esos cuatro paneles. De izquierda a derecha: 1- El Explorador de archivos: Permite ver las carpetas y es útil cuando trabajas con archivos en diferentes carpetas. 2 - El Editor: Donde escribiremos el código. 3 - El Explorador de variables: Es la ventana de la que te enamoraras con el tiempo. Permite ver el tipo y valor de las variables. Después de utilizarlo, no querrás utilizar ningún IDE que no tenga uno. 4 - La terminal: Donde se muestra por pantalla el resultado de nuestro código que hemos escrito en el Editor.
19
5. Un vistazo a Anaconda y Spyder Hay más ventanas que pueden ser útiles puntualmente, como el perfilador o profiler, el cual permite analizar el tiempo de ejecución de las diferentes partes de nuestro código con el objetivo de analizar los conocidos cuellos de botella o bottleneck ( con nuestras palabras es la parte que tarda más tiempo en ejecutarse). Como veras todo es bastante sencillo y claro, los IDE’s están evolucionando con el tiempo y algunos incluyen la opción de instalar plugins o add-ons con los que se puede configurar la parte visual u obtener otras funcionalidades específicas para una determinada tarea. Spyder es un IDE muy completo con gran variedad de funcionalidades, como la mayoría de los IDE’s modernos, pero al igual que ocurre con los coches, estos vienen con muchas funciones que nunca utilizaremos. Sin embargo, hay cuatro botones que son necesarios conocer (como el botón de nuestro coche que avisa de la cantidad de gasolina que tenemos).
20
5. Un vistazo a Anaconda y Spyder Los cuatro botones son: 1 - Ejecutar archivo (F5): Hace correr todo nuestro programa. 2 - Ejecutar la selección o línea actual (F9): Hace correr la selección de código o la línea actual (sino seleccionamos nada). Es un comando muy útil para cargar partes de nuestro código. 3 - Eliminar todas las variables: Borra las variables que se habían cargado en el programa. 4 - Seleccionar un directorio de trabajo: A diferencia del explorador de archivos que simplemente nos muestra las carpetas dentro de nuestro ordenador, el “selector del directorio de trabajo” refleja donde está “mirando” el IDE Spyder y lo considera como el archivo raíz. Es de vital importancia cuando importamos otros archivos, como excels, imágenes u otros programas de Python. Para terminar con este apartado, un comentario, los IDE’s son como los coches modernos, te ayudan y facilitan la conducción pero al final lo que importa es tu habilidad.
21
5. Un vistazo a Anaconda y Spyder Los cuatro botones son: 1 - Ejecutar archivo (F5): Hace correr todo nuestro programa. 2 - Ejecutar la selección o línea actual (F9): Hace correr la selección de código o la línea actual (sino seleccionamos nada). Es un comando muy útil para cargar partes de nuestro código. 3 - Eliminar todas las variables: Borra las variables que se habían cargado en el programa. 4 - Seleccionar un directorio de trabajo: A diferencia del explorador de archivos que simplemente nos muestra las carpetas dentro de nuestro ordenador, el “selector del directorio de trabajo” refleja donde está “mirando” el IDE Spyder y lo considera como el archivo raíz. Es de vital importancia cuando importamos otros archivos, como excels, imágenes u otros programas de Python. Para terminar con este apartado, un comentario, los IDE’s son como los coches modernos, te ayudan y facilitan la conducción pero al final lo que importa es tu habilidad.
22
6. Las variables I: La lógica detrás. “EL
SABIO NO DICE NUNCA TODO LO QUE PIENSA, PERO SIEMPRE PIENSA TODO LO QUE DICE” ARISTÓTELES.
En el capítulo anterior explicábamos las librerías, los IDE y descargamos el paquete Anaconda, el cual nos iba a simplificar la vida. Pero antes de adentrarnos a escribir código, echaremos un vistazo a Anaconda y Spyder. Cuando abres Anaconda, aparecen una serie de rectángulos donde se encuentran los programas que ya vienen instalados dentro de la plataforma. Es probable que algunos componentes no estén instalados todavía en tu distribución, pero no te preocupes, nosotros únicamente vamos a utilizar el IDE de Python, Spyder.
23
6. Las variables I: La lógica detrás. Por ejemplo, declaremos una variable que se llame “a” y guarde el número 3
a=3 Vamos a crear otra variable que se llame “b” y guarde el número 5.. b=5
Por último, creamos la variable “sumAB” y que sea igual a a+b
sumAB=a+b Mostramos por pantalla el resultado (en Python simplemente se pone print y entre paréntesis lo que quieres mostrar por pantalla) y presionas F5 para ejecutar todo el código . print (sumAB)
El resultado debe de ser 8. Hasta aquí todo sencillo pero vamos a ir más allá para entender uno de los pilares de python.Imaginemos que creamos una variable a=1 (estamos sobrescribiendo en este caso el valor que había antes de 3) y la variable b=a.Al estar utilizando el IDE Spider, podrás observar en el explorador de variablescómo el valor de la variable b ahora vale 1. Sin embargo, aquí viene la pregunta ¿ Cuánto crees que será el valor de b si cambiamos el valor de a como a = 3? Para responder a esa pregunta, necesitas entender algo clave. Se llama el principio de transitividad. Justo cuando presionas F5 y ejecutas el código, el intérprete de Python (recordemos que Python no tiene compilador al igual que otros lenguajes de programación como C++ que convierta el código al lenguaje máquina de 010101001, sino que hay un intérprete que como su propio nombre indica interpreta nuestro código y lo traduce a forma intermedia para ser ejecutado) recorre en sentido de arriba a abajo e izquierda a derecha el código.
24
6. Las variables I: La lógica detrás. 1- Asigna al objeto “1" un tipo de dato: Los tipos de datos los veremos en el siguiente capítulo, pero a modo introductorio pueden ser Integer (si es un número), string (si es una palabra o letra entre comillas), float (si es un número decimal) o bool (si es verdadero o falso). 2 - Se crea una referencia (imagina una flecha o puntero) que enlaza la variable “a” con el objeto 1 y su correspondiente tipo. De acuerdo a dicho principio, Python espera que a una variable se le asigne o bien un dato/conjunto de datos o una variable que a su vez contenga un dato o conjunto de datos. De esta forma cuando el intérprete de Python lee b=a, realmente está leyendo “b” es igual al valor al que apunta “a”.
Si ahora vuelves a declarar otro valor a la variable “a”. Por ejemplo a="gato" ¿ Cuál es el valor de la variable “b”? Efectivamente, “b” sigue teniendo la referencia al objeto 1. Por lo tanto, “b” vale 1 y no “gato”. Cuando el intérprete lee el objeto en el momento en el que declaramos la variable, puede ser dos tipos simple o compuesto y los veremos más en detalle en el siguiente capítulo.
25
7. Las variables II: datos simples “EN
LA
VIDA HAY ALGO PEOR QUE EL FRACASO: EL NO HABER INTENTADO NADA ” FRANKLIN D. ROOSVELT.
Recordemos que en el momento de declarar una variable el intérprete asignaba al dato su tipo de dato. Los tipos de datos pueden ser simples o compuestos.Antes de seguir, hay que introducir brevemente 3 conceptos: Saber de que tipo es una variable, mostrar algo por pantalla y como hacer comentarios. Para saber de qué tipo es una variable tan solo hay que escribir type y entre paréntesis el nombre de la variable. Por ejemplo: type(a) Para mostrar algo por pantalla solo hay que escribir print y entre paréntesis lo que queremos mostrar. Por ejemplo: print(a) Además, introducimos el concepto de comentarios. Cualquier cosa que escribas a la derecha de # el intérprete lo considerará como un comentario y no código. a=5 print (type(a)) # Esto es un comentario.
26
7. Las variables II: datos simples Los datos simples más importantes son: Números, también conocidos como integer. Float, son números decimales (separados con un punto). String: Son letras, palabras o frases. Van entre comillas “ “. Boolean o booleano en español, se refiere a cierto o falso. Puede tomar dos valores. True o False. Ejemplo práctico: Declara un conjunto de variables.
a=3 b=5.3 c="Hello" d=True
Así se vería en el IDE Spyder:
Me gustaría que te dieras cuenta por ti mismo de una serie de cosas importantes que crearán otro pilar en tu aprendizaje de Python.
27
7. Las variables II: datos simples Si pones un numero entre comillas se considera un string.
TestInt1="5"
2. No puedes sumar un número (ya sea float o integer) con un palabra (string). prueba=a+c
Devuelve un TypeError: unsupported operand type(s) for +: ‘int’ and ‘str’. Esto que asusta al principio es un error. Siempre que veas un error, respira y lee porque te dará pistas de lo que estas haciendo mal. En este caso la primera palabra es TypeError, y luego nos dice que no se soporta el comando + entre un int (integer o numero) y str (sring o palabra). 3. Si haces una operación entre un float y un integer, el resultado será un float es decir un número decimal (incluso si el resultado es un 10 sin decimales, para Python será 10. ) 4. El tipo booleano esconde un secreto, porque por dentro True es un 1 y False es 0. y al ser números se pueden sumar. Prueba hacer lo siguiente: e= d*5 # Lo que realmente esta ocurriendo es 1*5=5 5. Se puede convertir de un tipo a otro. Esta herramienta es muy IMPORTANTE y te permitirá jugar con las variables. Recuerdas que no podiamos sumar un número con una letra. Pero lo que puedes hacer es convertir el número a string y sumarlos o al revés (aunque cuidado porque el resultado final es diferente.) #Convertir a string: Astr=str(3) #Convertir a float: Afloat=float(a)#Convertir a Booleano: Abool= bool(a) #Todo lo que no sea 0 se considera True #Convertir integer:Solo si es un número previamente ejemploString="10" ejemploNum=int(ejemploString)
28
7. Las variables II: datos simples 6. Sumar o concatenar strings. Puedes juntar palabras simplemente poniendo +.
w1="hello" w2="world" w3=w1+" "+w2 # Sino ponemos " ",el resultado seria helloworld 7. Truco con booleanos: Recuerdas que en el punto 4 hemos dicho que el tipo booleano esconde un secreto, pues si lo combinamos con el punto 5, podemos hacer algo que hará que los algortimos sean más rapidos. Si conviertes algo a Booleano y luego lo conviertes integer obtendras 1 y 0. Hasta aqui una introducción de los tipos simples. En el siguiente capítulo introduciremos los datos compuestos y algo llamado slicing.
29
8. Las variables II: listas y slicing. “LOS
QUE
SABEN
CÓMO PENSAR NO NECESITAN MAHATMAN GANDHI.
MAESTROS”
Las variables compuestas están diseñadas para almacenar colecciones de datos que son en sí mismos objetos como los que vimos en el capítulo anterior (integer, float, booleano o strings). Hay 4 tipos de datos compuestos: Listas, tuplas, diccionarios y conjuntos. Este capítulo es uno de los más importantes ya que a lo largo de estos años he visto como la gente que empieza no sabe (debido a que no se lo han explicado de forma clara y sencilla) cuando utilizar una lista o una tupla y no utiliza nunca los conjuntos. Cada uno tiene su utilidad y lo vamos a ver de forma muy sencilla:
30
8. Las variables II: listas y slicing. Las listas Tenemos que pensar en las listas como en cajas conectadas.
Dentro de las cajas puedes guardar cualquier cosa, un tipo de dato como un 7, una variable que Dentro de las cajas puedes guardar cualquier cosa, un tipo de dato como un 7, una variable que contenga un tipo de dato como un “hola” o incluso (y aquí es donde viene lo interesante, puedes guardar una variable que sea a su vez un conjunto de datos como otra lista). Los números escritos debajo de las “cajas” son las posiciones. En Python, como en la mayoría de los lenguajes de programación se comienza desde el 0.
31
8. Las variables II: listas y slicing. Para introducir algo dentro de un lista puedes o bien escribirlo cuando lo estas creando :
l=[] # opcion 1 l=list() # opcion 2
Para introducir algo dentro de un lista puedes o bien escribirlo cuando lo estas creando :
l=[10,”dog”,variable,452.8] o bien utilizar una de sus propiedades (llamado en Python métodos o lo que es lo mismo “cosas que puedes hacer con este tipo”).
l.append[200] #Guarda automáticamente el número 200 al final En este momento vamos a introducir un concepto muy importante y es el del punto “ . ” Cuando escribes un objeto y luego un punto accedes a las funciones o métodos de ese objeto. Las listas son muy utilizadas en Python y tienen muchos métodos, los cuales mi recomendación es conocer que existen y poco a poco cuando los vayas necesitando los iras aprendiendo. Por ejemplo:
32
8. Las variables II: listas y slicing. En Spyder, y mayorías de IDE’s cuando escribes el punto se mostraran por pantalla los métodos (como vemos en la imagen). El icono f indica que es una función y la palabra a la derecha es su nombre. Cada función hace alguna cosa y como veremos posteriormente con las funciones, cuando llamas una función tiene que ir seguido de dos parentesis (). Por ejemplo: l.count(10) #nos devuelve el número de veces que esta en la lista l.append("perro") #Inserta al final de la lista el string "perro" l.insert(3,10) #inserta en la posición 3 el item 10 l.pop() # Sino pones nada borra el último elemento l.pop(2) # Borra el elemento en la posición 2 l.sort() # Ordena la lista l.reverse() # Le da la vuelta a la lista l.clear() #Borra el contenido de la lista l.extend(lista) # pone al final de la lista, otra lista.
¿Por qué hay a veces números o elementos de los paréntesis y otras veces no? Como veremos posteriormente con las funciones, cuando creas una función está puede contener parámetros, los cuales son necesarios para que se ejecute correctamente la función. ¿Cómo puedo saber si esa función admite parámetros o no? Spyder viene otra vez en nuestra ayuda! Si seleccionas con el ratón y presionas control + I, parecerá en Spyder una pantalla de ayuda. Por ejemplo:
33
8. Las variables II: listas y slicing. La parte que nos interesa es append (self, value). El self lo explicaremos en detalle en el último capítulo sobre Programación Orientada a Objetos. Pero significa, “él propio objeto” Es decir este método de una lista devolverá la propia lista con algo más (que será el value) Esta función admite 1 parámetro, llamado por defecto value (el self nunca se considera un parámetro). Debajo, hay una pequeña definición sobre lo que hace dicha función, en este caso dice “append object to end” o con nuestras palabras, “pone al final de una lista un objeto”. Por lo tanto, para usar esta función tenemos que poner algo entre paréntesis (lógicamente, ya que es una función que pone algo al final de una lista, por lo tanto necesita ese algo) y nos devolverá la propia lista con el parámetro al final. La parte que nos interesa es append (self, value). El self lo explicaremos en detalle en el último capítulo sobre Programación Orientada a Objetos. Pero significa, “él propio objeto” Es decir este método de una lista devolverá la propia lista con algo más (que será el value) Esta función admite 1 parámetro, llamado por defecto value (el self nunca se considera un parámetro). Debajo, hay una pequeña definición sobre lo que hace dicha función, en este caso dice “append object to end” o con nuestras palabras, “pone al final de una lista un objeto”. Por lo tanto, para usar esta función tenemos que poner algo entre paréntesis (lógicamente, ya que es una función que pone algo al final de una lista, por lo tanto necesita ese algo) y nos devolverá la propia lista con el parámetro al final. Otro ejemplo:
34
8. Las variables II: listas y slicing. Como vemos aquí, no hay self. Porque está función de 1 parámetro no devuelve el propio objeto más algo sino que sólo devuelve “el número de veces que el valor se encuentra en la lista”. Terminamos este necesario inciso sobre cómo acceder a las funciones de un objeto o métodos y comenzamos otro tema de igual importancia, el slicing. Slicing Hemos hablado de posiciones pero no como acceder a ellas. Para eso tenemos que introducir el concepto de slicing. Imaginemos que tenemos esta lista:
l=["dog","cat","parrot","ant","human","robot"]
Hay tres casos clave del slicing, resumidos en lo siguiente:
El primer elemento es desde donde empezamos, el segundo hasta donde llegamos (sin llegar a alcanzar a dicho elemento) y el tercero son los saltos o steps. Sino ponemos nada Python tiene por defecto que acabas hasta el final y el step es 1. Caso 1: Sólo queremos un elemento. l=[0] #devuelve "dog"
35
8. Las variables II: listas y slicing. Caso 2: Queremos un elemento desde un comienzo hasta un final. l=[1:3] #devuelve"cat"y "parrot" Caso 3: Queremos los elementos de las posiciones pares desde la posición 2. l=[2::2] #devuelve "parrot" y "human" Además, para complicarnos un poco más la existencia (aunque es útil en algunos casos) se incorporó la posibilidad de hacer lo mismo que arriba pero empezando a contar desde el final. Por lo que, las posiciones se podrían poner de la siguiente forma:
Las listas como habíamos dicho son el conjunto de datos más utilizado en Python, por lo que le hemos dedicado más tiempo. En el siguiente, capítulohablaremos sobre las tuplas, los conjuntos y los diccionarios.
36
9. Las variables II: Diccionarios “
ABRID
ESCUELAS Y SE CERRARÁN CONCEPCIÓN ARENAL
CÁRCELES ”.
En el capítulo anterior explicamos las listas y ahora continuamos con los tipos de datos compuestos, hablando sobre los diccionarios, tuplas y conjuntos. Los diccionarios Como su nombre indica se utilizan para guardar relaciones entre algo y algo conocidos como clave(key) y valor (value), unidos entre sí por el operador “:” Es decir, un diccionario. Los diccionarios se inicializan de dos formas: d1=dict() d2={}
37
9. Las variables II: Diccionarios Para añadir algo a un diccionario, puedes o bien hacerlo en el momento de la creación. d={"red":"rojo","blue":"azul","green":"verde"}
o bien, como hacíamos con las listas, con uno de sus métodos, en este caso, no se llama append sino update. d.update({"black":"negro") Hay tres conceptos importantes con los diccionarios: 1. A diferencia de las listas, los diccionarios no están ordenados (por lo que no tiene sentido hacer slicing ya que las posiciones de las llaves son aleatorias). 2. La clave o key debe de ser única. Es decir no podemos tener d={“hola”:”hello”,”hola”:”Hi”} ya que al buscar “hola” el diccionario no sabrá si nos referimos a “hello” o a “Hi” 3. Las key y los valores pueden hacer referencia a cualquier objeto aceptado por Python. Como decíamos con las listas, hay bastantes métodos para los diccionarios, aunque los tres más importantes son:
d.get("red")#Devuelve el valor de la llave "red" d.pop("red")# Borra tanto la clave como el valor "red" d.update({"black":"negro") # Introduce un nuevo elemento clave valor
38
10. Las variables II: Tuplas “SIEMPRE
HAZ LO QUE TENGAS MIEDO RALPH WALDO EMERSON
DE
HACER”.
Las tuplas Las tuplas son secuencias ordenadas que almacenan diferentes objetos (hasta aquí son como las listas). Sin embargo, a diferencia de las listas, las tuplas son inmutables, es decir que no se pueden modificar (ni añadir o eliminar elementos, u ordenar, no se puede cambiar su forma). ¿Entonces para que sirven ? Son más rápidas y seguras (es el punto positivo de no poderse modificar). Suelo visualizar las tuplas como cajas ya embaladas, las cuales podemos no modificar su contenido interior. Las tuplas se inicializan de dos formas:
t1=() t2=tuple()
39
10. Las variables II: Tuplas Para añadir algo a una tupla , puedes o bien hacerlo en el momento de la creación, t1=(4,5,9,7,"dog",4.5) o bien convirtiendo una lista a una tupla. l=[4,5,6,7,9,2,34,8.212,"cat"] t2=tuple(l) A diferencia de las listas y los diccionarios que tienen bastantes métodos o “cosas que hacer con ellos”, las tuplas solo tienen dos:
t2.count(5)# Devuelve el número de veces que hay un 1 en la tupla t2.index(9)# Devuelve en qué posición se encuentra el 9. Uno de los pequeños trucos más utilizados es crear una lista, modificar su contenido u ordenarla y luego convertirla a una tupla para que sea más rápido trabajar con ella.
40
11. Las variables II: Conjuntos “¿QUÉ
ES
MÁS
CIERTO
QUE LA VERDAD? RESPUESTA: ISABEL ALLENDE
LA
HISTORIA .”
Los conjuntos: Los conjuntos es la última de las 4 estructuras de datos compuestos y la vez la menos utilizadas de todas. Los conjuntos permiten realizar aquellos olvidados ejercicios de teoría de conjuntos que hacíamos en las clases de probabilidad de matemáticas. Lo más importante de los conjuntos son dos propiedades: El contenido no está ordenado como ocurría con los diccionarios. El contenido no puede repetirse.
41
11. Las variables II: Conjuntos Si lo piensas por un momento los conjuntos son como si los diccionarios sólo tuvieran keys o claves. Recuerda que los diccionarios no estaban ordenados ni las claves podían repetirse. Aunque pueda parecer un defecto que no se puedan duplicar los elementos, a veces un defecto se puede convertir en una ventaja. Ya que, si te interesa remover elementos duplicados en una lista, puedes simplemente convertirla a conjunto. Veamos los conjuntos más en profundidad. Los conjuntos si son mutables, se pueden cambiar de tamaño añadiendo o eliminando componentes. A excepción de un tipo de conjunto, que no se suele utilizar, conocido como frozenset (el cual es inmutable como las tuplas). A diferencia de las listas, diccionarios y tuplas donde puedes crearlas vacías, si escribes c= {} estarás inicializando un diccionario. Entonces hay dos formas: O bien introduces algo como un número y al no ser un elemento de clave : valor, Python no lo considera como un diccionario sino como un conjunto. La otra forma es simplemente, escribiendo el set().
s={1} s=set()
Para añadir algo a un conjunto, puedes o bien hacerlo en el momento de la creación.
s={1,2,3,4} Para añadir algo a un conjunto, puedes o bien hacerlo en el momento de la creación.
s.update([5]) #añades un valor s.update([6,7,8]) #añades más de un valor Ahora vamos a ver las dos utilidades de los conjuntos:
42
11. Las variables II: Conjuntos La primera utilidad es como habíamos dicho utilizar su “defecto” tener elementos duplicados como una “virtud”. Imaginemos que nos dan una lista que contiene 1.000 nombres de países en Europa, pero nosotros queremos guardar solo los “no repetidos” (hay 49 países en Europa según Wikipedia). Podemos simplemente convertir la lista a conjunto y automáticamente se borraran los duplicados y luego podríamos volver a convertir del conjunto a lista, si quisiéramos tener las propiedades de ordenar. Veamos un ejemplo, de eliminar números duplicados: l=[1,1,1,2,2,3,4,4,4,4,4,5,6,6,6,7,8,8,8,9,9,9] s=set(l)# {1, 2, 3, 4, 5, 6, 7, 8, 9}
Si luego queremos volver a tener una lista simplemente puedes hacer lo siguiente:
l=list(s) Ahora vamos a ver la segunda utilidad de los conjuntos, la cual es más avanzada, pero demuestra un mayor nivel en el uso de Python. Las técnicas de ahora aparte de ser útiles se utilizan en SQL cuando trabajas con bases de datos.
TEORÍA DE CONJUNTOS Comenzamos con lo más interesante de los conjuntos y es la teoría de conjuntos. Antes de empezar, hay que avisar que como a los programadores normalmente les gusta escribir lo menos posible, hay dos formas de escribir lo mismo la larga (que son 4 o cinco letras y la corta que es un carácter). Los cuatro principales casos son:
43
11. Las variables II: Conjuntos 1. La unión Es el conjunto de la suma de todos los elementos de A y B.
Ejemplo: s1={1,2,3} s2={2,3,4,5}#Método 1: s3=s1.union(s2)#Método2: s4= s1 | s2print (s3)#{1, 2, 3, 4, 5} print (s4)#{1, 2, 3, 4, 5}
44
11. Las variables II: Conjuntos 2. La intersección Es un conjunto con los elementos comunes de A y B.
Ejemplo:
s1={1,2,3} s2={2,3,4,5}#Método 1: s3=s1.intersection(s2)#Método2: s4=s1 & s2print (s3) #{2, 3} print (s4)#{2, 3}
45
11. Las variables II: Conjuntos 3. La diferencia Es un conjunto de los elementos de A menos B y los comunes.
Ejemplo:
s1={1,2,3} s2={2,3,4,5}#MĂŠtodo 1: s3=s1.difference(s2)#MĂŠtodo2: s4=s1 - s2print (s3) #{1} print (s4)#{1}
46
11. Las variables II: Conjuntos 4. La diferencia simétrica Es el conjunto de todos los elementos de A y B menos el común.
Ejemplo:
s1={1,2,3} s2={2,3,4,5}# Método 1: s3=s1.symmetric_difference(s2)# Método2: s4=s1 ^ s2print (s3)#{1} # {1, 4, 5} print (s4)#{1} # {1, 4, 5}
Ya hemos visto lo más importante de los conjuntos y las variables de tipo de dato simple (int,float,string y boolean) así como las variables de tipo de dato compuesto (listas, diccionario, tuplas y conjuntos). Ahora, lo más importante ¿cuándo debemos utilizar cada uno de ellos? Para contestar a esa pregunta y con el objetivo de que quede lo más completo posible, he escrito un pequeño resumen en el siguiente capítulo:
47
12. Las variables II: Resumen. “SÓLO
LE
FALTA
EL
TIEMPO A QUIEN NO JOVELLANOS
SABE
APROVECHARLO” .
Las listas es el dato compuesto más utilizado en Python y el más flexible ya que puedes guardar lo que quieras, modificar su tamaño, ordenarlo, incluso guardar listas dentro de las propias listas. Por lo que, es la más utilizada y la que utilizarás salvo ocasiones concretas como las de abajo: Los diccionarios los usaremos cuando nos interese tener el sistema de clave: valor. Por ejemplo, para crear un traductor o el catálogo de una tienda con los nombres de los artículos y sus precios. Las tuplas las utilizaremos cuando queramos leer de forma más rápida su contenido en comparación con las listas, o si queremos hacer cálculos avanzados de matemáticas ya que son muy utilizadas en machine learning e Inteligencia Artificial. Los conjuntos se utilizan cuando quieres comparar los elementos de dos conjuntos de datos (como dos listas) y obtener los comunes, o los que están presentes en un conjunto y no en otro. Se usan mucho cuanto trabajas con bases de datos (sino conoces SQL, con lo que has visto hoy de conjuntos acabas de avanzar en su aprendizaje) ya que permite obtener elementos comunes a grupos (por ejemplo los clientes que comprar bolsos y además compran pulseras).
48
12. Las variables II: Resumen. Pequeño recordatorio de su tipología (mutable o inmutable, ordenada o desordenado, contenido único o no): Con las listas se puede hacer todo. Los diccionarios y los conjuntos están desordenados y el contenido no se repite. Como ayuda para recordarlo, si ves que algo está entre { } quiere decir que su contenido esta desordenado y el contenido no se repite. Las tuplas son inmutables. Finalmente, hay que decir que puedes cambiar de tipología del tipo del conjunto de dato. Por ejemplo, podrías tener elementos duplicados en una lista, convertirlos a conjunto para eliminar los elementos duplicados y luego convertirlo de vuelta a una lista para ordenarlo y finalmente convertirlo a una tupla para que sea más rápido de leer y no se pueda cambiar su forma. sl=[1,2,3,1,2,3,4,5,3,2,5,4,9,1,2,3,5,6,7,8]# Convertimos a tupla para eliminar los elementos duplicados s=set(l)# Convertimos a lista para ordenarla l=list(s) l.sort()# Convertimos la lista a tupla para que sea mas rápida de leer. t=tuple(l) print (t)
Por último, esta es una pequeña tabla resumen:
49
13 - Los operadores: “CUANDO
HABLES, PROCURA QUE TUS PALABRAS MEJORES QUE EL SILENCIO”. PROVERBIO INDIO
SEAN
Es hora de empezar a jugar con las variables, y para eso vamos a introducir a los operadores, que son los símbolos de +, -, *, &, //, = y otros más. Los hay de cinco tipos: Los operadores aritméticos. Son lo que se utilizan para realizar las operaciones aritméticas básicas (sumas, restas, multiplicación…).
50
13 - Los operadores:
Los operadores de comparaciรณn o relacionales. Se utilizan para hacer comparaciones y devuelven True o False (los usaremos posteriormente cuando veamos los if).
Los operadores de asignaciรณn. Se utilizan para asignarle un valor a las variables. El mรกs normal es el = el cual utilizamos para asignar el valor de un dato a una variable. a=10 Pero no hay que confundirlo con el operador de comparaciรณn == el cual compara si el valor de la izquierda es igual al de la derecha. a=10 b=5 a==b # False
51
13 - Los operadores:
Hay otros operadores de asignación que hacen honor a lo que habíamos dicho antes de que a los programadores les gusta escribir lo menos posible. Luego, cuando estudiemos los if veremos que será útil declarar que el valor de una variable sea igual a la propia variable más algo. Por ejemplo, el valor del saldo de tu dinero en el banco será igual a tu dinero actual en el banco más un ingreso o menos un gasto. Para hacer eso puede hacerse lo siguiente: money=100 expense=20 money=money-expense Pero también existe la forma “cool”: money=100 expense=20 money -= expense Hacen exactamente lo mismo, lo único es que te ahorras tener que volver a escribir la variable. No importa en absoluto si no quieres usarlos, pero está bien saber que existen. Los otros operadores de asignación son para el resto de las operaciones aritméticas son: +=,-=, *=,/=,//= y **=. Los operadores lógicos. Son sólo tres y son muy intuitivos ya que hacen exactamente lo que dicen: and, or , not. Los veremos luego cuando estemos viendo los condicionales o if, pero para ir introduciendo los if, aquí hay tres ejemplos básicos: Ejemplo con and, donde no se muestra por pantalla “YES” ya que el “a” no cumple la condición de si “a” y “b “son mayores de 15. a=10 b=20 if (a and b >15): print ("YES")
52
14 - Flujo de ejecución (Loops y Condicionales) “LA
ACCIÓN
ES
LA
LLAVE FUNDAMENTAL PABLO PICASSO
DE
TODO
ÉXITO”
Antes de comenzar hablando sobre los loops o bucles “for” y “while” y los condicionales (if) , debemos introducir el flujo de ejecución. Es decir, ¿cómo lee el intérprete de Python nuestras líneas de código? El interprete comienza a leer la primera línea comenzando desde arriba de izquierda a derecha y continúa hasta abajo. Es decir, tendría una forma como la siguiente:
53
14 - Flujo de ejecución (Loops y Condicionales) IF Los if, o condicionales, permiten añadir una bifurcación en el flujo de código al añadir un sí ocurre “algo” entonces que pase “algo”. Para escribir una sentencia if simplemente hay que escribir lo siguiente: age=16i f age <18: print ("You are under 18" ) else: print ("You are over 18")
Cuando el intérprete llega al if se produce una bifurcación en el flujo. Si la siguiente línea de código es True o cierta, entonces se ejecuta lo que está debajo del if lo cual está identado con el tabulador. Gráficamente, se podría representar de la siguiente forma.
54
14 - Flujo de ejecución (Loops y Condicionales) Si queremos seguir lanzando condicionales, podemos hacerlo con elif.
age=14 if age <18: print ("You are under 18" ) elif 18< age <20: print("The age is between 18 and 20") elif 20< age<25: print ("The age is between 20 and 25") else: print ("You are over 25)
Hay otra forma de gestionar el control de flujo y consiste en hacer que el código se repita varias veces. Es lo que se conoce dentro de los lenguajes de programación como loop. Los loops se pueden escribir en Python como for o como while. For lo utilizaremos cuando conocemos el número de veces que vamos a repetir el código, por ejemplo:
for i in range(10): print ("hello")
55
14 - Flujo de ejecución (Loops y Condicionales) De forma gráfica lo veríamos así:
En el caso de que no conozcamos el número de veces que vamos a iterar sobre ciertas partes del código podemos simplemente, utilizar while:
i=0 while i<10: print ("hello") i +=1
56
14 - Flujo de ejecución (Loops y Condicionales) Cuando utilicemos while, no tenemos que olvidar inicializar la variable al principio e incrementarla posteriormente dentro del mismo while. La tercera forma de manipular el control de flujo es con las funciones. Las funciones se utilizan para encapsular líneas de código en tan solo una palabra con el objetivo de volver a reutilizarla y limpiar el código. Lo más importante es entender que el interprete cuando lee el término “def”, el cual es el utilizado para crear las funciones o como se dice en programación (“definir una función”) automáticamente lo que hace es entender que lo que sigue es una función y recordar que en esa posición había una función llamada x. Por ejemplo. def saludo(): print ("Hello") saludo()
Gráficamente sería como lo siguiente:
57
14 - Flujo de ejecución (Loops y Condicionales) Lo más importante de las funciones son 2 cosas: La posibilidad de escribir parametros dentro de los paréntesis. Un ejemplo del uso de los parámetros:
def suma(a,b): print ("Sum is:", a+b) suma(10,2) # 'Sum is:', 12 Como podemos ver al declarar la variable hemos también escrito dentro de los paréntesis dos parámetros, los cuales es suma total es a+b =12 en este caso. En el siguiente capítulo hablaremos de algo muy importante como es el scope y que tiene mucho que ver con el uso de funciones. 2. El término return. El cual se utiliza para que la función devuelva algo cuando la llamas. Por ejemplo, utilizando el ejemplo que acabamos de hacer:
def suma(a,b): return (a+b) print (suma(10,2)) #'Sum is:', 12 A pesar de que pueda parecer lo mismo, la mayor diferencia reside en que si utilizamos el término return podemos guardar dicho resultado en una variable y podemos obtener más de un resultado. Por ejemplo:
58
14 - Flujo de ejecución (Loops y Condicionales) def operation(word): a=10 b=4 if word==1: return a+b elif word==2: return a-b elif word==3: return a*b elif word==4: return a/b else: return "Please type any of the options: 1,2,3,4" a=input("select one of the following options:1,2,3,4 ===> ") operation(a)
En este último ejemplo, lo que hace el intérprete es leer primero la función y posteriormente preguntar por un “input” (lo que significa que el usuario escribe con su teclado”) y lo guarda en la variable a. Posteriormente, llama a la función operación y le pasa como parámetro la variable a. Hasta aquí las tres formas de manipular el flujo de ejecución en programación. En la siguiente lección veremos el scope.
59
15 - El Scope:
“NUNCA
SABES LO FUERTE QUE ERES, HASTA QUE SER ES LA ÚNICA OPCIÓN QUE TE QUEDA ” BOB MARLEY
FUERTE
El término de scope en programación hace referencia al alcance de las variables en nuestro programa. Se distingue entre: Alcance global, las cuales afectan a todo el programa. Alcance local, las cuales afectan dentro de una función. Por ejemplo: a=2 b=3 def suma(a,b): a=10 print ("Scope local:",a+b)suma(a,b) print ("Scope global:", a+b) Es muy importante entender lo que acabamos de hacer para ganar más fundamentos básicos de programación. La clave está en a=10, el cual esta dentro de la función “suma” por lo tanto se considera ámbito local y sólo afecta a a lo que este dentro de esta función.
60
16 - Las librerías
“AUNQUE MAÑANA FUERA EL DÍA DEL FIN DEL MUNDO, YO PLANTARÍA TODAVÍA MANZANOS EN EL DÍA DE HOY.” MARTIN LUTERO
Las librerías o módulos en los lenguajes de programación son paquetes de código ya escritos por alguien con el objetivo de solucionar un problema en concreto. Por ejemplo, imaginemos que estamos trabajando con áreas de geometría y tenemos que calcular el área de miles de formas geométricas. Si queremos hacer dicha tarea tendremos que escribir las funciones de los distintos cuerpos geométricos como el cuadrado, triángulo, el cubo, el cilindro… a=2 b=3 def suma(a,b): a=10 print ("Scope local:",a+b)suma(a,b) print ("Scope global:", a+b)
61
16 - Las librerías
Una vez tengamos escritos dichas funciones, lo único que habría que hacer sería llamar a dichas funciones. Por ejemplo: cube(10)#1000
Pero y si alguna persona ya hubiera realizado ese trabajo por nosotros y hubiera guardado todas esas funciones en un fichero o conjunto de ficheros. Pues exactamente ese es el objetivo de las librerías, reutilizar el código y no hacer lo que comúnmente se llama en programación como reinventar la rueda. A pesar de que lo que acabamos de hacer sea muy simple, hay muchas librerías que cubren aspectos más complejos de la programación e incluso están altamente optimizadas con otros lenguajes de bajo nivel como es el caso de la librería de Machine Learning creada por Google, Tensorflow. ¿Cómo podríamos nosotros crear una librería y reutilizar ese código que acabamos de crear? Es muy fácil, lo único que hay que hacer es guardar el archivo que acabamos de crear con el nombre que queramos. Por ejemplo, geometric y posteriormente llamar a nuestra librería desde el mismo código. Hay tres formas de llamar a una librería, siendo la última la más utilizada. 1/ Esta forma no es la recomendable ya que estamos importando todas las funciones que habíamos creado anteriormente y podría darse el caso de que si seguimos importando librerías se pudieran solapar las funciones causando un error o lo que es peor todavía que no nos avise que hay un error pero el resultado es totalmente diferente al que esperábamos. from geometric import * print(cube(10)) 2/ La segunda forma es llamar a la librería utilizando el comando “import”. from geometric import * print(cube(10))
62
16 - Las librerías
3/ La tercera forma es asignar a la librería un “apodo o alias” de esta forma, cada vez que utilicemos una función tendremos que llamar a ese alias y seguido de un punto.
import geometric as geo print(geo.cube(10))
Pero lo interesante es que puedes importar muchas más librerías de terceros. Además, tras haber instalado anaconda ya tenemos instaladas más de 100 librerías muy utilizadas. ¿Tengo que aprender las funciones o métodos de cada una de las librerías? No, es imposible. ¿Cuales son las librerías más importantes de Python? Depende de a lo que tengas planeado desarrollar o especializarte. Por ejemplo, en Data Science se utilizan Pandas, numpy y SciPy. En Machine Learning, se utiliza tensor ffow, scikit-learn y seaborn para visualización de datos. Si utilizas Python como herramienta para hacer scrapping en páginas web entonces utilizaras scrapy y pandas. Como consejo, no te obsesiones con las librerías ni aprender todas sus funciones, sino en aprender su lógica detrás, entender las bases e incluso intentar hacer tu tus propias funciones con el objetivo de seguir aprendiendo.
63
17 - Capturar errores
”
LA
FELICIDAD NO ES LA AUSENCIA DE PROBLEMAS; ES LA HABILIDAD PARA TRATAR CON ELLOS ”. STEVE MARABOLI
Hoy hablaremos sobre como capturar errores en Python. Esto es sobre todo útil cuando trabajamos con usuarios. Por ejemplo, imaginemos que preguntamos a un usuario que introduzca dos números para posteriormente sumarlos. Para eso hacemos esta simple función:
def sumaf(a,b): return(a+b) print (sumaf("dog",5)# Error print ("hello")
64
17 - Capturar errores
Nuestro usuario amablemente ha intentado sumar “dog” con 5. Este código dará un error, ya que si recordamos hace unos capítulos cuando hablábamos respecto a los tipos de dato “string”, decíamos que no podían sumarse una palabra con un número lo cual tiene sentido. Por lo tanto, el código de arriba nos lanzará un error y el interprete no seguirá recorriendo el resto de las líneas. Para solucionar y controlar este tipo de errores podemos utilizar lo que se conoce como manejo de errores con los comandos try y except. def sumaf(a,b): try: return a+b except: print("There's a error" ) print (sumaf("dog",5)) print("hello") Ahora ese error se ha “capturado”, y el interprete seguirá leyendo el código hasta llegar a la siguiente línea donde mostrará por pantalla “hello”. Además, si queremos darle feedback al usuario podríamos “capturar” dicha excepción utilizando el comando de Exception y guardándolo en e :
def sumaf(a,b): try: return a+b except Exception as e: print("There's a error" ) print (sumaf("dog",5)) print("hello")
65
17 - Capturar errores
Hay otro término que nos puede ayudar a con nuestra gestión de errores y es “finally”, el cual se ejecutará al final del todo sin importar lo que pase. Dicho parámetro es útil cuando tenemos que cerrar un archivo o la base de datos. def sumaf(a,b): try: return a+b except Exception as e: print("There's a error" ) finally: print("Thank you") print (sumaf("dog",5)) print("hello")
Para terminar, hay que decir que podemos capturar los errores si además conocemos su tipo de error en lugar Exception.
def sumaf(a,b): try: return a+b except TypeError: print("There's a error" ) finally: print("Thank you") print (sumaf("dog",5)) print("hello")
66
17 - Capturar errores
Para saber los posibles tipos de errores tan sólo tenemos que ver el mensaje que nos devuelve por pantalla la terminal:
Hasta aquí hemos visto lo más importante del manejo de errores, el cual está bien conocerlo y sirve sobre todo cuando estamos haciendo programas más complejos.
67
18 - Introducción a clases “UN
AMIGO
DE
TODOS ES UN AMIGO ARISTÓTELES.
DE
NADIE ”.
Con lo visto hasta ahora podríamos hacer prácticamente el 95% de lo que queramos con Python. Sin embargo, en ciertas ocasiones es mejor utilizar otro paradigma. ¿Qué es un paradigma en un lenguaje de programación? Con nuestras palabras un paradigma no es otra cosa que una forma de pensar. Es decir, en ciertos idiomas como por ejemplo el japonés se utilizan unas expresiones verbales diferentes si hablamos con alguien de mayor a edad. A pesar de que el lenguaje en sí mismo, como la idea sean los mismos en ciertos casos es mejor utilizar la forma respetuosa. Pues los paradigmas en programación son parecidos a dicho ejemplo, son distintas formas de pensar y resolver el mismo problema y en algunos casos concretos pueden ser más beneficiosos. La programación orientada a objetos es muy utilizada cuando tenemos “cosas” que son parecidas entre sí, pero tienen que tratarse de forma diferente. Por ejemplo, la POO es muy utilizada en videojuegos ya que podemos tener en pantalla un ejército de esqueletos que comparten características en común unos de otros, pero necesitamos que cada uno tenga su propia salud.
68
18 - Introducción a clases
Otro ejemplo, son los botones de una página web o aplicación. Dichos botones, pueden compartir características como tamaño, animaciones. Sin embargo, cuando haces clic en cada uno pueden ocurrir acciones diferentes. Después de esta introducción del concepto de programación vamos a ver cómo crear una clase sencilla. Debido a que la POO es algo diferente a lo que hemos visto hasta ahora, hay que cambiar ligeramente la forma de pensar. Vamos a introducir cuatro conceptos importantes: Las clases son como los moldes. Las instacias son los distintos esqueletos o los botones. El parámetro self, es un parámetro especial el cual utilizaremos a la hora de construir la clase. La función __init__ la cual sirve para construir la clase y darle los atributos (vida, nivel de ataque, nivel de defensa) Veamos un ejemplo:
#1. Creation class class skeleton(): def __init__(self,life=5,attack=1,defence=2): self.life=life self.attack=attack self.defence=defence def scream(self): print ("I m a Skeleton !") #2. Creating the skeletons using the class above ske1=skeleton(10,2,2) ske2=skeleton(8,2,3) ske3=skeleton(6,3,1) ske4=skeleton(12,5,4) print (ske3.scream())
69
18 - Introducción a clases
Como podemos ver esta forma de programar es de forma conceptual diferente a como lo habíamos hecho hasta ahora. Sin embargo, tenemos que pensar que el uso de clases a pesar de que está muy extendido en Python simplemente responden a un problema en concreto y que se reduce a la reutilidad de código. Esto es sólo la punta del iceberg de las clases las cuales pueden llegar a hacer en pocas líneas cosas muy complejas. Sin embargo, lo más importante será conocer y empezar a jugar con las herramientas vistas hasta ahora (a excepción de la POO) con ejercicios prácticos. Te invito al siguiente capítulo donde hablaremos de que es lo siguiente.
70
19 - Resumen “NO
INTENTES CONVERTIRTE EN UN HOMBRE SINO EN UN HOMBRE DE VALOR”. ALBERT EINSTEIN
DE
ÉXITO,
Este capítulo tiene que servir como un pequeño resumen de lo que hemos visto. #1 — Propósito del libro: Comentábamos de forma breve el objetivo del libro haciendo énfasis en escribir un libro que se centre en lo más importante. #2 — Los lenguajes de programación y Python: Hablábamos sobre que son los lenguajes de programación, los tipos, cuantos hay, cual es el mejor y veíamos un ejemplo de las diferentes sintaxis (Python,c++ y javascript) #3 — Breve historia y características: Características del lenguaje Python. #4 — La instalación con Anaconda: Instalamos el entorno de desarrollo Anaconda. #5 — Un vistazo a Anaconda y Spyder: Echamos un vistazo rápido al entorno Anaconda y al IDE Spyder.
71
19 - Resumen
#6 — Las variables I: La lógica detrás. Comentábamos como se declaran las variables en Python y lo que ocurre detrás de bambalinas. #7 — Las variables II: datos simples: Hablamos sobre los datos simples (integers, float, strings y booleans). #8 — Las variables II: listas y slicing. Nos metemos en profundidad con los datos compuestos y en concreto las listas y el slicing. #9 — Las variables II: Diccionarios. Hablamos sobre los diccionarios, se utilizan para guardar relaciones entre “algo” y “algo” conocidos como clave(key) y valor (value) #10— Las variables II: Tuplas. Escribíamos sobre las tuplas las cuales son secuencias ordenadas que almacenan diferentes objetos, aunque son más rápidas y seguras. #11 —Las variables II: Conjuntos. Tratábamos la última de los tipos de datos compuestos los cuales permiten realizar aquellos olvidados ejercicios de teoría de conjuntos que hacíamos en las clases de probabilidad de matemáticas. #12 — Las variables II: Resumen. Hacíamos un resumen de los cuatro tipos de datos compuestos (listas, diccionarios, tuplas y conjuntos). #13 — Los operadores: Tratamos los símbolos +-*/% =< > or and. #14 — Flujo de ejecución (Loops y Condicionales): Uno de los capítulos más importantes y esencia de la programación. El uso de los bucles for y los condicionales if. #15 — El scope: Hablamos sobre el alcance de las variables, las que podían ser alcance local y global. #16 — Las librerías: Vemos el concepto de librería o modulo con un ejemplo práctico. #17 — Capturar errores: Tratamos como capturar los errores con Try y Except. #18 — Introducción a clases: Terminamos con una introducción a la POO y a las clases.
72
20 - Fin ¿y ahora qué? “
¡NO
OLVIDÉIS
UN
INSTANTE, QUE ES QUEDARSE ATRÁS RAMÓN DE CAMPOAMOR
NO
IR
ADELANTE
Ya hemos visto la teoría necesaria para poder empezar a programar, hemos leído el manual de conducción que necesitamos para aprobar el examen de conducir. ¿Entonces, ahora que hacemos? Ahora vamos a empezar a conducir, pero lo haremos además viendo a los mejores conductores. Vamos a practicar lo que hemos aprendido dando un paso más allá en todos los lenguajes de programación y no sólo resolviendo los ejercicios sino viendo como los mejores programadores del mundo lo han resuelto y analizando sus técnicas y forma de pensar. Para llevar nuestras habilidades a un nuevo nivel comenzaremos un nuevo curso de competiciones de programación con Python.
!”
73
20 - Fin ¿y ahora qué?
¿Por qué resolver problemas de competiciones de programación en lugar de hacer proyectos? Por tres motivos: 1 — El objetivo final de cualquier pintor será lógicamente pintar cuadros. Sin embargo, apuntarse a competiciones de pintura donde tiene que demostrar sus habilidades a problemas muy concretos le harán salirse de su zona de confort y desarrollar técnicas que podrá utilizar posteriormente en sus cuadros. 2 — Debido a que estas intentando aprender programación, es probable que quieras trabajar como en alguna empresa como programador, por lo que es también probable que tengas que superar alguna prueba de programación. Dichas pruebas de programación son directamente sacadas de problemas de las competiciones de programación y utilizados ampliamente por compañías como Facebook, Google, Amazon y Apple. 3 -Los problemas de las competiciones de programación suelen ser bastante divertidos si eres del tipo de persona al que le gustan los puzzles y desafíos. Te invito a nuestra siguiente serie “Aprende Python con competiciones de programación.”
74
Agradecimientos por las fotografías Parte de las fotografías del presente libro han sido obtenidas en Unsplash. A continuación pueden encontrar a sus artistas. #1 (pág. 3) Propósito del libro: Cristina Gottardi, Jason Rosewell #2 (pág. 5) Los lenguajes de programación y Python: Jon Tyson #3 (pág. 8) Breve historia y características: Dariusz Sankowski #5 (pág.17) Un vistazo a Anaconda y Spyder: Marten Newhall #9 (pág. 36) Las variables II: Diccionarios: Romain Vignes #15 (pág. 59) El scope: Markus Spiske #16 (pág. 60) Las librerías: Janko Ferlič #18 (pág. 67) Introducción a clases: Jared Sluyter #19 (pág. 70) Resumen: rawpixel #20 (pág. 72) Fin ¿y ahora qué?: Kolleen Gladden
Gracias