xxxxxxxxxx
# JORNADAS DE 
# SOFTWARE LIBRE DE LA
# UNIVERSIDAD DE GRANADA
### Granada, 27 y 28 de septiembre de 2018
[http://osl.ugr.es/JSLUGR/](http://osl.ugr.es/JSLUGR/)
<img src="./images/SinUGROSL.png" alt="Download" />

JORNADAS DE

SOFTWARE LIBRE DE LA

UNIVERSIDAD DE GRANADA

Granada, 27 y 28 de septiembre de 2018

http://osl.ugr.es/JSLUGR/

Download

 
# Taller de Python

Taller de Python

 
### [Pedro González Rodelas: ](http://www.ugr.es/~prodelas/) [prodelas@ugr.es](mailto:prodelas@ugr.es) y
### [Fco. Miguel García Olmedo: ](http://www.ugr.es/~folmedo/) [folmedo@ugr.es](mailto:folmedo@ugr.es).
 
El objetivo de este mini-taller es __iniciaros desde cero en el lenguaje de programación [Python](https://www.python.org/), así como daros a conocer distintas posibilidades de instalación y entornos de desarrollo ([IDEs](https://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado)).__
__Nuestra herramienta fundamental de trabajo para ello será  un [Notebook de Jupyter](http://jupyter.org/)__ como este que estás usando en este momento. Durante este corto taller te familiarizarás con este tipo de ficheros y aprenderás a abrirlos/crearlos, manejarlos y editarlos adecuadamente, así como convertirlos a otros formatos de fichero.
Naturalmente que este taller inicial sólo pretende ser eso, una visión general y una presentación de los conceptos y pasos fundamentales a seguir para que __una vez instalado Python, tengas la posibilidad de descargar parte de la ingente cantidad de material libremente disponible y puedas seguir aprendiendo a tu ritmo durante todo el tiempo que desees.__ 
Recuerda, que tanto este notebook como bastante material adicional se encuentra disponible en [nuestro repositorio: https://github.com/prodelas/TallerPythonUGR/](https://github.com/prodelas/TallerPythonUGR/).
_¡¡Ánimo y, manos a la obra!!_

El objetivo de este mini-taller es iniciaros desde cero en el lenguaje de programación Python, así como daros a conocer distintas posibilidades de instalación y entornos de desarrollo (IDEs).

Nuestra herramienta fundamental de trabajo para ello será un Notebook de Jupyter como este que estás usando en este momento. Durante este corto taller te familiarizarás con este tipo de ficheros y aprenderás a abrirlos/crearlos, manejarlos y editarlos adecuadamente, así como convertirlos a otros formatos de fichero.

Naturalmente que este taller inicial sólo pretende ser eso, una visión general y una presentación de los conceptos y pasos fundamentales a seguir para que una vez instalado Python, tengas la posibilidad de descargar parte de la ingente cantidad de material libremente disponible y puedas seguir aprendiendo a tu ritmo durante todo el tiempo que desees.

Recuerda, que tanto este notebook como bastante material adicional se encuentra disponible en nuestro repositorio: https://github.com/prodelas/TallerPythonUGR/.

¡¡Ánimo y, manos a la obra!!

 
## Pasos a seguir:

Pasos a seguir:

 
### 1. Descarga de Python.

1. Descarga de Python.

 
La instalación manual de Python, el servidor de Notebooks de Jupyter y todos los paquetes y módulos que utilizaremos, puede ser una tarea ardua y agotadora, pero no te preocupes: ¡alguien ha hecho ya el trabajo duro!
__[Anaconda](https://www.anaconda.com/what-is-anaconda/) es una distribución de Python que recopila muchas de las bibliotecas necesarias en el ámbito de la computación científica__ y desde luego, todas las que necesitaremos en este taller. Además __incluye herramientas para programar en Python, como el [IPython Notebook](https://ipython.org/index.html) y [Spyder](https://code.google.com/p/spyderlib/)__ (un IDE al estilo de [MATLAB](https://es.mathworks.com/products/matlab.html)). Si además alguna vez también has sido ususario de [Mathematica](https://www.wolfram.com/mathematica/) habrás notado por otra parte que el concepto de Notebook y servidor de cálculos que estás usando responde también completamente al útil y versátil planteamiento del FrontEnd + Kernel del que ya disponía [Mathematica desde las primeras versiones](http://www.wolfram.com/mathematica/scrapbook/). Por lo que se podría decir que a este respecto, el sistema de Notebooks de Jupyter y los entornos de desarrollo para Python unifican y poseen lo mejor de ambas plataformas de software propietario, hasta hace muy poco predominantes en el mundo del desarrollo y la investigación Científica y Técnica. __Y además de todo esto, resulta completamente gratuito y está en continua e [imparable expansión](https://stackoverflow.blog/2017/09/06/incredible-growth-python/) y [desarrollo](https://www.peerbits.com/blog/factors-will-drive-python-growth-in-2018.html). ¡Creo que no se podría pedir más!__. 

La instalación manual de Python, el servidor de Notebooks de Jupyter y todos los paquetes y módulos que utilizaremos, puede ser una tarea ardua y agotadora, pero no te preocupes: ¡alguien ha hecho ya el trabajo duro!

Anaconda es una distribución de Python que recopila muchas de las bibliotecas necesarias en el ámbito de la computación científica y desde luego, todas las que necesitaremos en este taller. Además incluye herramientas para programar en Python, como el IPython Notebook y Spyder (un IDE al estilo de MATLAB). Si además alguna vez también has sido ususario de Mathematica habrás notado por otra parte que el concepto de Notebook y servidor de cálculos que estás usando responde también completamente al útil y versátil planteamiento del FrontEnd + Kernel del que ya disponía Mathematica desde las primeras versiones. Por lo que se podría decir que a este respecto, el sistema de Notebooks de Jupyter y los entornos de desarrollo para Python unifican y poseen lo mejor de ambas plataformas de software propietario, hasta hace muy poco predominantes en el mundo del desarrollo y la investigación Científica y Técnica. Y además de todo esto, resulta completamente gratuito y está en continua e imparable expansión y desarrollo. ¡Creo que no se podría pedir más!.

 
Lo único que necesitas hacer es:
* Ir a la [página de descargas de Anaconda](https://www.anaconda.com/download/).
* Seleccionar tu sistema operativo (Windows, OSX, Linux).
* Descargar Anaconda (utilizaremos en principio Python 3.X).

Lo único que necesitas hacer es:

x
<img src="./images/download_anaconda.png" alt="Download" />

Download

 
### 2. Instalación de Python.

2. Instalación de Python.

 
Consulta las __[instrucciones de instalación](http://docs.continuum.io/anaconda/install.html)__ de Anaconda para tu sistema operativo. En el caso de Windows y OS X, te encontrarás con los típicos instaladores gráficos a los que ya estás acostumbrado. Si te encuentras en Linux, deberás ejecutar el script de instalación desde la consola de comandos, así que recuerda comprobar que tienes bash instalado y asignar permisos de ejecución al script.
En caso de que tengas cualquier caso de duda durante el proceso, recuerda que __¡los buscadores de internet son tus mejores amigos!__
¡Muy bien! Ya tienes instalado ¿pero dónde?
* En __Windows__, desde `Inicio > Anaconda` verás una serie de herramientas de las que ahora dispones ¡no tengas miedo de abrirlas! 
* En __OS X__, podrás acceder a un launcher con las mismas herramientas desde la carpeta `anaconda` dentro de tu carpeta personal de aplicaciones. 
* En __Linux__, debido al gran número de combinaciones de distribuciones más escritorios no tendrás esos accesos directos gráficos (lo que no quiere decir que no puedas crearlos tú a posteriori), aunque no hacen ninguna falta si te manejas bien con tu distribución Linux o simplemente abres las aplicaciones dedes una terminal de comandos.
Por otra parte, de vez en cuando convendrá __actualizar Anaconda__ para asegurarnos de que tenemos nuestra distribución de Python con todos sus paquetes al día. No tienes porqué hacerlo ahora mismo, pero tal vez en casa tranquilamente y con una buena conexión a Internet podrías abrir una __ventana de comandos__ (Anaconda Prompt en Windows, o una simmple terminal en OS X y Linux) y ejecutar los siguientes comandos de actualización (confirmando en el caso de tener que instalar paquetes nuevos):
```
conda update anaconda
conda update --all
```
Si experimentas cualquier clase de problema durante este proceso, desinstálala y vuelve a [instalarla](http://docs.continuum.io/anaconda/install.html) donde puedas asegurarte de tener una conexión a internet estable. Si el problema fuera simplemente falta de espacio en disco, podrías comenzar con una instalación minimalista a través de [Miniconda](https://conda.io/miniconda.html) e ir instalando poco a poco sólo los módulos y paquetes necesarios mediante el comando 
```
conda install paquete
```
También para usuarios más avanzados de sistemas tipo Linux siempre existe la posibilidad de instalación personalizada de todo el sistema via __apt-get__ y dentro de una terminal de sistema a través de __pip__ en vez de con __conda__, pero esto no será objeto de esta pequeña introducción y hay innumerable documentación, tanto en sitios web, blogs y chats de usuarios avanzados, entre los que cabría destacar [StackOverflow](https://stackoverflow.com/).
Ya tenemos nuestra distribución de Python con todos los paquetes que necesitemos (y prácticamente casi todos los que en un futuro podamos necesitar). 
_¡A trabajar!_

Consulta las instrucciones de instalación de Anaconda para tu sistema operativo. En el caso de Windows y OS X, te encontrarás con los típicos instaladores gráficos a los que ya estás acostumbrado. Si te encuentras en Linux, deberás ejecutar el script de instalación desde la consola de comandos, así que recuerda comprobar que tienes bash instalado y asignar permisos de ejecución al script.

En caso de que tengas cualquier caso de duda durante el proceso, recuerda que ¡los buscadores de internet son tus mejores amigos!

¡Muy bien! Ya tienes instalado ¿pero dónde?

  • En Windows, desde Inicio > Anaconda verás una serie de herramientas de las que ahora dispones ¡no tengas miedo de abrirlas!

  • En OS X, podrás acceder a un launcher con las mismas herramientas desde la carpeta anaconda dentro de tu carpeta personal de aplicaciones.

  • En Linux, debido al gran número de combinaciones de distribuciones más escritorios no tendrás esos accesos directos gráficos (lo que no quiere decir que no puedas crearlos tú a posteriori), aunque no hacen ninguna falta si te manejas bien con tu distribución Linux o simplemente abres las aplicaciones dedes una terminal de comandos.

Por otra parte, de vez en cuando convendrá actualizar Anaconda para asegurarnos de que tenemos nuestra distribución de Python con todos sus paquetes al día. No tienes porqué hacerlo ahora mismo, pero tal vez en casa tranquilamente y con una buena conexión a Internet podrías abrir una ventana de comandos (Anaconda Prompt en Windows, o una simmple terminal en OS X y Linux) y ejecutar los siguientes comandos de actualización (confirmando en el caso de tener que instalar paquetes nuevos):

conda update anaconda
conda update --all

Si experimentas cualquier clase de problema durante este proceso, desinstálala y vuelve a instalarla donde puedas asegurarte de tener una conexión a internet estable. Si el problema fuera simplemente falta de espacio en disco, podrías comenzar con una instalación minimalista a través de Miniconda e ir instalando poco a poco sólo los módulos y paquetes necesarios mediante el comando

conda install paquete

También para usuarios más avanzados de sistemas tipo Linux siempre existe la posibilidad de instalación personalizada de todo el sistema via apt-get y dentro de una terminal de sistema a través de pip en vez de con conda, pero esto no será objeto de esta pequeña introducción y hay innumerable documentación, tanto en sitios web, blogs y chats de usuarios avanzados, entre los que cabría destacar StackOverflow.

Ya tenemos nuestra distribución de Python con todos los paquetes que necesitemos (y prácticamente casi todos los que en un futuro podamos necesitar).

¡A trabajar!

 
### 3. Descarga del material del taller.

3. Descarga del material del taller.

 
El material de este taller, y mucho más material adicional, está disponible en __GitHub, una plataforma para alojar proyectos de software que también  proporciona una serie de herramientas para el trabajo en equipo__. Digamos que es una especie de red social-herramienta para escribir y compartir código. (No te preocupes, no necesitarás saber nada sobre ella de momento).

El material de este taller, y mucho más material adicional, está disponible en GitHub, una plataforma para alojar proyectos de software que también proporciona una serie de herramientas para el trabajo en equipo. Digamos que es una especie de red social-herramienta para escribir y compartir código. (No te preocupes, no necesitarás saber nada sobre ella de momento).

 
Simplemente ve a nuestro  [repositorio en GitHub](https://github.com/prodelas/TallerPythonUGR/), y en la parte derecha encontrarás un botón __*Clone or download*__ como éste: ![](./images/download_zip.png) 
Púlsalo, selecciona __*Download Zip*__, __guarda el archivo__ en tu ordenador y __descomprímelo__. 

Simplemente ve a nuestro repositorio en GitHub, y en la parte derecha encontrarás un botón Clone or download como éste:

Púlsalo, selecciona Download Zip, guarda el archivo en tu ordenador y descomprímelo.

 
### 4. Utilización del material del taller.

4. Utilización del material del taller.

 
Una vez que instalado Python y descargado el material del taller, para poder utilizarlo debes __abrir una pestaña de un navegador compatible con el servidor de comandos del núcleo de Jupyter, ya sea a través de Anaconda Navigator (lanzando Jupyter Notebook o JupyterLab con el ratón), o bien a través de una terminal situada en la carpeta que has descomprimido, o cualquier otra donde quieras trabajar__

Una vez que instalado Python y descargado el material del taller, para poder utilizarlo debes abrir una pestaña de un navegador compatible con el servidor de comandos del núcleo de Jupyter, ya sea a través de Anaconda Navigator (lanzando Jupyter Notebook o JupyterLab con el ratón), o bien a través de una terminal situada en la carpeta que has descomprimido, o cualquier otra donde quieras trabajar

 
Así pues en una ventana de terminal (o de Anaconda Prompt en Windows) se abrirá una línea de comandos, después de situarte en el directorio de trabajo elegido (mediante la orden de cambio de directorio __cd__ ) teclea en ella:
`jupyter notebook` 
y pulsa Intro.
__¡Es importante que la dirección que aparezca en la línea de comandos sea la correspondiente a la carpeta donde se quiera trabajar, ya que en caso contrario determinados elementos como las imágenes incrustadas no se visualizarán correctamente!__
Aparecerán unas cuantas líneas y __se abrirá tu navegador web predefinido. __No hace falta disponer de conexión a Internet__. Lo que está ocurriendo es que *"tu navegador está mostrando lo que le manda el programa que se está ejecutando desde la línea de comandos"*__ (entiéndelo así de momento y ya tendrás tiempo de profundizar si quieres). De hecho si has usado Mathematica alguna vez, la estructura de Kernels + FrontEnd emplea justo esta misma filosofía de trabajo; la única diferencia ahora es que la visualización de las celdillas de entrada/salida, texto, y demás formateo del notebook se realiza directamente en una pestaña del navegador en vez de en una aplicación tipo FrontEnd propietaria.
__Así que no cierres la terminal de la línea de comandos hasta que termines de usar el notebook y ya lo hayas guardado y cerrado en tu navegador.__

Así pues en una ventana de terminal (o de Anaconda Prompt en Windows) se abrirá una línea de comandos, después de situarte en el directorio de trabajo elegido (mediante la orden de cambio de directorio cd ) teclea en ella:

jupyter notebook

y pulsa Intro.

¡Es importante que la dirección que aparezca en la línea de comandos sea la correspondiente a la carpeta donde se quiera trabajar, ya que en caso contrario determinados elementos como las imágenes incrustadas no se visualizarán correctamente!

Aparecerán unas cuantas líneas y se abrirá tu navegador web predefinido. No hace falta disponer de conexión a Internet. Lo que está ocurriendo es que "tu navegador está mostrando lo que le manda el programa que se está ejecutando desde la línea de comandos" (entiéndelo así de momento y ya tendrás tiempo de profundizar si quieres). De hecho si has usado Mathematica alguna vez, la estructura de Kernels + FrontEnd emplea justo esta misma filosofía de trabajo; la única diferencia ahora es que la visualización de las celdillas de entrada/salida, texto, y demás formateo del notebook se realiza directamente en una pestaña del navegador en vez de en una aplicación tipo FrontEnd propietaria.

Así que no cierres la terminal de la línea de comandos hasta que termines de usar el notebook y ya lo hayas guardado y cerrado en tu navegador.

 
---
También es posible cambiar el estilo de este notebook (letra, colores...) sin más que cargar un estilo concreto de Notebook.
_Las siguientes celdas contienen configuración del Notebook_
basada en una plantilla previamente usada por 
- Lorena Barba en el correspondiente repositorio creado al efecto para uno de los cursos MOOC sobre métodos numéricos:
https://github.com/numerical-mooc/numerical-mooc
así como por 
- Juan Luis Cano, Mabel Delgado y Álex Sáez para su curso de AeroPython. Consulta su [repositorio del curso en GitHub](https://github.com/AeroPython/curso_caminos-2016)

También es posible cambiar el estilo de este notebook (letra, colores...) sin más que cargar un estilo concreto de Notebook. Las siguientes celdas contienen configuración del Notebook basada en una plantilla previamente usada por

  • Lorena Barba en el correspondiente repositorio creado al efecto para uno de los cursos MOOC sobre métodos numéricos:

https://github.com/numerical-mooc/numerical-mooc

así como por

In [1]:
 
# Esta celda da el estilo al notebook
from IPython.core.display import HTML
css_file = './styles/aeropython.css'
HTML(open(css_file, "r").read())
Out[1]:
/* This template is inspired in the one used by Lorena Barba in the numerical-mooc repository: https://github.com/numerical-mooc/numerical-mooc We thank her work and hope you also enjoy the look of the notobooks with this style */ El estilo se ha aplicado =)
 
En este corto taller sólo podremos hacer una pequeña introducción a Python. __Lee el principio con calma__ para saber cómo manejar el Notebook (también puedes usar la ayuda `Help > User Interface Tour` ) y __no tengas miedo de tocar y cambiar cosas a tu antojo__. No vas a romper tu ordenador y a las malas, siempre puedes volverte a descargar todo de GitHub.
En esa ventana de tu navegador puedes moverte por las sub-carpetas del directorio de trabajo y ver los archivos con extensión `.ipynb`. __Ve a la carpeta `Notebooks Adicionales` y abre alguno de los allí guardados haciendo click sobre ella.__ 

En este corto taller sólo podremos hacer una pequeña introducción a Python. Lee el principio con calma para saber cómo manejar el Notebook (también puedes usar la ayuda Help > User Interface Tour ) y no tengas miedo de tocar y cambiar cosas a tu antojo. No vas a romper tu ordenador y a las malas, siempre puedes volverte a descargar todo de GitHub.

En esa ventana de tu navegador puedes moverte por las sub-carpetas del directorio de trabajo y ver los archivos con extensión .ipynb. Ve a la carpeta Notebooks Adicionales y abre alguno de los allí guardados haciendo click sobre ella.

 
<!--NAVIGATION-->
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [Introducción a IPython y Jupyter Notebook ](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/JupyterNotebookyPythonBasico.ipynb) | >
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [Computación científica con IPython](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/Python_para_CalculoCientifico.ipynb) | >
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [Introducción a la programación con Python ](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/Introduc_Python_y_modulos_adicionales.ipynb) | >
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [SciPy: Módulo de Python para Cálculo Científico ](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/Scipy.ipynb) | >
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [Ejemplo de práctica docente ](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/Practica_Derivacion_Integracion_Numerica.ipynb) | >
< [Notebooks Adicionales](https://github.com/prodelas/TallerPythonUGR/tree/master/notebooks_adicionales) | [Ejemplos en investigación ](https://github.com/prodelas/TallerPythonUGR/blob/master/notebooks_adicionales/Ejemplos_Investigacion.ipynb) | >
 
##### ¡Ya estás listo para empezar a practicar y aprender con el material adicional de este taller por tu cuenta durante mucho tiempo! 
##### Y si no, tan sólo tienes que esperar para apuntarte a alguno de los cursos que se programarán próximamente tanto a través de la Fundación UGR-Empresa, Centro Mediterráneo, así como formando parte del Plan F.I.D.O. de la UGR.
¡Ya estás listo para empezar a practicar y aprender con el material adicional de este taller por tu cuenta durante mucho tiempo!
Y si no, tan sólo tienes que esperar para apuntarte a alguno de los cursos que se programarán próximamente tanto a través de la Fundación UGR-Empresa, Centro Mediterráneo, así como formando parte del Plan F.I.D.O. de la UGR.
 
#### También puedes consultar algunos libros y recursos sobre Python, como libros, cursos online, etc.
* ["Automate the Boring Stuff with Python" by Al Sweigart](http://automatetheboringstuff.com/)   
(Free to read under a Creative Commons license) 
* ["Effective Computation in Physics" by Anthony Scopatz, Kathryn Huff](http://shop.oreilly.com/product/0636920033424)
* ["Python Data Science Handbook" by Jake VanderPlas](http://shop.oreilly.com/product/0636920034919)   
(contenido disponible en [GitHub](https://github.com/jakevdp/PythonDataScienceHandbook))
* Así como una galería muy interesante sobre Notebooks de IPython (que también se pueden visualizar con la ayuda de [nbviewer](http://nbviewer.jupyter.org/)) en el siguiente link: [https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks](https://github.com/jupyter/jupyter/wiki/A-gallery-of-interesting-Jupyter-Notebooks)

También puedes consultar algunos libros y recursos sobre Python, como libros, cursos online, etc.

 
###### Este notebook y gran parte del material para este taller ha sido realizado por: 
###### Pedro González Rodelas y Fco. Miguel García Olmedo 
###### usando parte del material empleado en varios cursos sobre Python impartidos durante los últimos años.
###### Y varios notebooks, estilos y plantillas adaptadas a partir de las previamente  desarrolladas por:
- J.R. Johansson (jrjohansson at gmail.com)
Puedes consultar parte de sus [notebooks IPython](http://ipython.org/notebook.html)  en [http://github.com/jrjohansson/scientific-python-lectures](http://github.com/jrjohansson/scientific-python-lectures).
o bien en  [http://jrjohansson.github.io](http://jrjohansson.github.io).
- Hans Petter Langtangen. Consultar por ejemplo [su repositorio](https://github.com/hplgit/bumpy) usando ejemplos de Física.
- Juan Luis Cano, Mabel Delgado y Álex Sáez para su curso de AeroPython. Consulta su [repositorio del curso en GitHub](https://github.com/AeroPython/curso_caminos-2016)
Puedes visualizar en  YouTube alguna de las clases en vídeo que forman  parte del [Curso de Python para científicos e ingenieros](http://cacheme.org/curso-online-python-cientifico-ingenieros/) grabado en la Escuela Politécnica Superior de la Universidad de Alicante.
---
Este notebook y gran parte del material para este taller ha sido realizado por:
Pedro González Rodelas y Fco. Miguel García Olmedo
usando parte del material empleado en varios cursos sobre Python impartidos durante los últimos años.
Y varios notebooks, estilos y plantillas adaptadas a partir de las previamente desarrolladas por:
  • J.R. Johansson (jrjohansson at gmail.com)

Puedes consultar parte de sus notebooks IPython en http://github.com/jrjohansson/scientific-python-lectures. o bien en http://jrjohansson.github.io.

  • Hans Petter Langtangen. Consultar por ejemplo su repositorio usando ejemplos de Física.

Puedes visualizar en YouTube alguna de las clases en vídeo que forman parte del Curso de Python para científicos e ingenieros grabado en la Escuela Politécnica Superior de la Universidad de Alicante.


 
<br/>
##### <a rel="license" href="http://creativecommons.org/licenses/by/4.0/deed.es"><img alt="Licencia Creative Commons" style="border-width:0" src="http://i.creativecommons.org/l/by/4.0/88x31.png" /></a><br /><span xmlns:dct="http://purl.org/dc/terms/" property="dct:title">Taller introductorio sobre Python</span> por <span xmlns:cc="http://creativecommons.org/ns#" property="cc:attributionName">Pedro González y Fco. Miguel García Olmedo</span> se distribuye bajo una <a rel="license" href="http://creativecommons.org/licenses/by/4.0/deed.es">Licencia Creative Commons Atribución 4.0 Internacional</a>.


Licencia Creative Commons
Taller introductorio sobre Python por Pedro González y Fco. Miguel García Olmedo se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional.
Rendering widgets...