0% found this document useful (0 votes)
22 views

02 Fundamentos de Python

Master Data Science IMF

Uploaded by

msansor
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
22 views

02 Fundamentos de Python

Master Data Science IMF

Uploaded by

msansor
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 87

Fundamentos de Python

© Ediciones Roble, S. L.
Indice
Fundamentos de Python 3
I. Introducción 3
II. Objetivos 3
III. Lenguaje de programación Python 4
3.1. El lenguaje de programación Python 4
IV. Entorno de programación: Jupyter Notebook 5
4.1. Instalación de una distribución Anaconda para Jupyter Notebook 5
4.1.1. Características de Jupyter Notebook 5
4.1.2. Instalación de Anaconda 6
4.2. Primeros pasos con Jupyter Notebook 18
V. Sintaxis básica de Python 28
5.1. Declaración de variables 28
5.2. Comentarios 29
5.3. Operadores 30
5.4. Tipos de variables 39
VI. Herramientas para control de flujo 41
6.1. Condicionales 42
6.2. Bucles 46
6.2.1. Bucle for 46
6.2.2. Bucle while 49
VII. Estructuras de datos 51
7.1. Tuplas 51
7.2. Listas 53
7.3. Diccionarios de datos 62
VIII. Funciones 68
8.1. Funciones 68
8.2. Cómo definir y llamar funciones 69
8.3. Ejemplo del uso de funciones 71
8.4. Llamar funciones dentro de una funciones 73
IX. Resumen 81
Ejercicios 83
Caso práctico 83
Recursos 85
Bibliografía 85
Glosario. 85

2/87
Fundamentos de Python

Fundamentos de Python

I. Introducción
En esta primera unidad, se introducirá al alumno en el lenguaje de programación Python.

Actualmente, es uno de los lenguajes de programación más extendidos en el campo de la


ciencia de datos, junto con R.

Se enseñarán sus fundamentos principales, como la declaración de variables, los operadores básicos y
distinguir entre diferentes tipos de variables, así como las principales herramientas para controlar el flujo del
programa.

Posteriormente, el alumno comenzará a trabajar con las principales estructuras de datos de Python, que son:
tuplas, listas y diccionarios de datos; tras ello, para saber cómo modularizar los programas, se aprenderá a
diseñar funciones sencillas mediante la entrada y salida de parámetros.

II. Objetivos
Una vez finalizada esta unidad, el alumno habrá adquirido las siguientes competencias sobre los fundamentos de
Python.

Conocer los principales fundamentos de Python.

Saber instalar Jupyter Notebook[1].

Realizar desarrollos básicos en Python a través de Jupyter Notebook

Saber cómo declarar, procesar y distinguir distintos tipos de variables.

Conocer y manejar las sentencias condicionales if y else.

Conocer el funcionamiento de los bucles en Python for y while.

Trabajar con las principales estructuras de datos en Python: tuplas, listas y diccionarios de datos.

3/87
Fundamentos de Python

Modularizar los programas a través de funciones.

Resolver problemas de diferente dificultad.

[1]Esta herramienta se usará para trabajar con Python.

III. Lenguaje de programación Python

3.1. El lenguaje de programación Python


Lenguaje de programación Python

Fue creado en la década de los 90 por Guido Van Rossum.


Es un lenguaje de programación orientado a objetos, en el que podemos trabajar con estructuras de
datos de alto nivel y una sintaxis elegante y simple.

Estas razones, ligadas al gran auge de la ciencia de datos, han catapultado la popularidad de
Python, el cual es actualmente catalogado como uno de los lenguajes de programación más
populares del mundo[2].

Las principales características de Python son:

Orientado a objetos

Permite representar conceptos del mundo real a través de clases y objetos en un programa.

Multiplataforma

Python está disponible en los principales sistemas operativos como Linux, Windows, UNIX, Mac OS, etc. Esto
supone que un programa o script Python pueda ser ejecutado en diferentes sistemas operativos siempre que
este sistema cuente con un intérprete Python adecuado.

Tipado dinámico

A diferencia de otros lenguajes de programación, Python posee un tipado dinámico, lo que significa que no se
debe especificar el tipo de una variable, sino que esta tomará el tipo directamente en tiempo de ejecución en
función del valor que se le asigne o que reciba.

Lenguaje interpretado

Básicamente, la ejecución de los programas se realizará a través del script que ejecuta el intérprete de Python,
por lo tanto, no necesita compilación.

4/87
Fundamentos de Python

Evolución de Python[3]

Viene marcada por la propia comunidad de desarrolladores que se encarga de su actualización y


mantenimiento a través de la creación de nuevas funcionalidades. Estas actualizaciones son posibles dado que
Python es un proyecto de código libre.

Todas las razones anteriormente mencionadas hacen que Python tenga una curva de
aprendizaje corta, es decir: un desarrollador que empieza escribiendo programas muy
básicos puede avanzar rápidamente a programas avanzados que incluyan, por ejemplo, el uso
de librerías de código, la lectura de datos desde diversas fuentes.

Otro de los puntos fuertes de Python y de gran utilidad para el mundo del big data, del data science (ciencia de
datos) y de la inteligencia artificial es que, en Python, se puede trabajar a través de librerías. En este sentido,
Python posee potentes librerías de cálculo matricial y analítica de datos como Pandas, Numpy, Scipy, Scikit Learn,
Tensorflow, Keras, etc.

[2]Python: el lenguaje de programación más relevante de 2018. [En línea] URL disponible en: https://www.neoteo.com/pyt
hon-lenguaje-de-programacion-mas-relevante/

[3]Página principal de la comunidad Python. [En línea] URL disponible en: https://www.python.org/

IV. Entorno de programación: Jupyter Notebook

4.1. Instalación de una distribución Anaconda para Jupyter


Notebook

Una vez vistas las principales características de Python, es hora de escoger un entorno de
programación adecuado. Para ello, haremos uso de Jupyter Notebook.

Instalación de Phyton en Jupiter Notebook

4.1.1. Características de Jupyter Notebook

5/87
Fundamentos de Python

¿Qué es?

Es un entorno de programación que se ejecuta íntegramente sobre nuestro navegador web predeterminado
(Google Chrome, Firefox, Safari, etc.). Se basa en la idea de poder compartir todo el trabajo de un
desarrollador, desde el código fuente, comentarios, gráficas, vídeos, hasta anotaciones, como si de un cuaderno
se tratase (de ahí la denominación de “notebook”).

Principalmente, tiene compatibilidad con tres lenguajes de programación[4]: Julia, Python y R.

Es muy extendido entre la comunidad científica, especialmente en el campo de la ciencia de datos, ya que es un
buen soporte para poder trabajar y mostrar experimento.

Esto es debido a que sobre un mismo notebook, tal y como hemos mencionado antes, podemos mostrar
nuestro código Python, comentarios en el código, incluir anotaciones y, finalmente, mostrar resultados de forma
interactiva.

No solamente podemos incluir código de Python, sino que, además, podemos combinar otros lenguajes, como
HTML, Markdown, Latex o JavaScript, entre otros.

Otra de sus características importantes es que permite autocompletar el código que se va escribiendo; esto es
de gran ayuda pues permite identificar fácilmente variables y funciones, muestra ayuda en línea, etc.

[4]Jupyter Kernels. [En línea] URL disponible en: https://github.com/jupyter/jupyter/wiki/Jupyter-kernels

4.1.2. Instalación de Anaconda

Como ya se ha mencionado anteriormente, se puede trabajar en Python desde diferentes


entornos de programación.

Para esta ocasión, y aprovechando todas las ventajas que ofrece para la enseñanza, utilizaremos Jupyter
Notebook; para ello, descargaremos una distribución de Anaconda[5], que incluirá por defecto un intérprete
Python y nos permitirá desplegar Jupyter Notebook en nuestro navegador web.

Los pasos para la descarga e instalación de una distribución de Anaconda son los siguientes:

6/87
Fundamentos de Python

Accedemos a la web de Anaconda Distribution. [En línea] URL disponible en: https://www.anaconda.com/distribu
tion/

Figura 1. Vista de la web de Anaconda Distribution

Fuente: https://www.anaconda.com/distribution/

Pulsamos en el botón “Download” y nos llevará a la siguiente sección de descargas para descargar una versión
de Python.

Figura 2. Anconda Distribution, descarga de Python.

Fuente: https://www.anaconda.com/distribution/

7/87
Fundamentos de Python

Descargaremos la versión de Python 3.7; para ello, simplemente pulsamos en el botón verde “Download”.

Automáticamente, comenzará la descarga del archivo ejecutable que contendrá la distribución de Anaconda.

Una vez finalizada la descarga, ejecutamos el archivo descargado recientemente.

Figura 3. Archivo ejecutable con distribución Anaconda

Fuente: Elaboración propia

Aparecerá el asistente de instalación y pulsamos en “Next”.

Figura 4. Instalación de Anaconda (I).

Fuente: elaboración propia.

8/87
Fundamentos de Python

Aceptamos los términos del acuerdo de Anaconda.

Figura 5. Instalación de Anaconda (II).

Fuente: elaboración propia.

9/87
Fundamentos de Python

Seleccionamos el tipo de instalación (puede dejarse por defecto para que se descargue únicamente en nuestro
usuario).

Figura 6. Instalación de Anaconda (III).

Fuente: elaboración propia.

10/87
Fundamentos de Python

Seleccionamos la ruta de instalación (se recomienda utilizar la que aparece por defecto).

Figura 7. Instalación de Anaconda (IV).

Fuente: elaboración propia.

11/87
Fundamentos de Python

Seleccionamos “Registrar el intérprete de Python de la distribución de Anaconda por defecto” y pulsamos


“Install”.

Figura 8. Instalación de Anaconda (V).

Fuente: elaboración propia.

12/87
Fundamentos de Python

Esperamos a que finalice la instalación de Anaconda y pulsamos “Next”.

Figura 9. Instalación de Anaconda (VI).

Fuente: elaboración propia.

13/87
Fundamentos de Python

Pulsamos de nuevo en “Next”.

Figura 10. Instalación de Anaconda (VII).

Fuente: elaboración propia.

14/87
Fundamentos de Python

Si lo deseamos, marcamos las opciones para aprender más sobre Anaconda y los primeros pasos con
Anaconda, y pulsamos “Finish”.

Figura 11. Instalación de Anaconda (VIII).


Fuente: elaboración propia.

Nota: para instalar Jupyter Notebook en un sistema operativo diferente de Windows, es


necesario seguir las instrucciones de la documentación oficial, que están disponibles en el
siguiente enlace: https://docs.anaconda.com/anaconda/install/

Una vez ha finalizada la instalación de Anaconda, mostraremos cómo lanzar en el navegador web nuestro
primer notebook en Python. Para ello, realizaremos los siguientes pasos:

15/87
Fundamentos de Python

Buscaremos la aplicación Anaconda Navigator y la ejecutamos en nuestro sistema.

Figura 12. Anaconda Navigator.

Fuente: elaboración propia.

Una vez inicie Anaconda Navigator, tendremos la siguiente vista:

Figura 13. Vista, Anaconda Navigator.

Fuente: elaboración propia.

16/87
Fundamentos de Python

Pulsamos sobre la aplicación “Notebook”.

Una vez que inicie Jupyter Notebook, aparecerá la siguiente vista.

Figura 14. Vista, Jupyter Notebook.

Fuente: elaboración propia.

El siguiente panel de navegación muestra que se ha lanzado correctamente Jupyter Notebook en nuestro
entorno local. Si atendemos a la URL, podremos ver que está activo en localhost en el puerto 8888. Dentro de la
interfaz web, podremos movernos entre los diferentes directorios y crear nuevos archivos como, en nuestro
caso, un nuevo notebook. Para realizar esta acción, simplemente pulsaremos en el desplegable “New” > ”Python
3”.

Figura 15. Crear Notebook: Python 3.

Fuente: elaboración propia.

17/87
Fundamentos de Python

Aparecerá la siguiente vista con un notebook vacío. Por defecto se llamará “Untitled”.

Figura 16. Vista de un notebook.

Fuente: elaboración propia.

[5]Anaconda Distribution [En línea] URL disponible en: https://www.anaconda.com/distribution/

4.2. Primeros pasos con Jupyter Notebook


Tomaremos como referencia el apartado anterior, donde ya tenemos disponible un notebook para comenzar a
trabajar, y pasaremos a describir las secciones más interesantes:

“File”

Dentro de esta sección podemos crear un nuevo notebook, renombrarlo, hacer una copia, guardar un checkpoint
del mismo, imprimirlo y descárgalo. Las opciones que más utilizaremos serán:

“Notebook”

Guarda todo el notebook, en el que estará incluida una vista de los resultados con extensión “.ipynb”. De esta
forma, podremos, posteriormente, ejecutar o modificar el notebook guardado.

“PDF vía LaTeX”

Guarda todo el notebook, e incluye las anotaciones realizadas en un archivo PDF.

“HTML”

Guarda todo el notebook en formato HTML para que sea visible desde un navegador. Esta es una forma
recomendable de mostrar resultados, ya que puede verse con facilitad todo el código implementado,
comentarios, anotaciones y resultados en un mismo documento.

“Python”

Guarda todo el notebook como un script de Python con extensión “.py” para que sea ejecutable desde un
intérprete de Python.

18/87
Fundamentos de Python

Figura 17. Jupyter Notebook. Sección “File”.

Fuente: elaboración propia.

19/87
Fundamentos de Python

“Edit”

Desde esta sección podremos, básicamente, gestionar las celdas de código o anotaciones, ya sea copiando,
cortando o borrando celdas como operaciones más básicas. Posteriormente, también tendremos opciones más
avanzadas en edición de celdas, como dividir en dos una celda o juntar dos celdas en una. Además, podremos
moverlas de posición hacia arriba o hacia abajo. Esto es muy recomendable para ir organizando nuestro código
y que quede de una forma más legible.

Figura 18. Jupyter Notebook. Sección “Edit”.

Fuente: elaboración propia.

20/87
Fundamentos de Python

“Insert”

Esta sección es la encargada de poder insertar nuevas celdas, ya sea a continuación de la celda en donde
tengamos el cursor o después de esta.

Figura 19. Jupyter Notebook. Sección “Insert”.

Fuente: elaboración propia.

“Cell”

Esta parte se encarga de ejecutar las celdas de código. Podremos elegir entre una sola celda, ejecutar desde el
cursor hasta el final, ejecutar desde el principio hasta el cursor o ejecutar todas las celdas.

Es también muy importante hacer énfasis en los tipos de celda que podemos encontrarnos en un notebook:

“Code”

Celdas con código fuente Python.

“Markdown”

Celdas con anotaciones estilo markdown (muy aconsejable para documentar nuestros notebooks).

“Raw NBConvert”

Celdas en crudo. La ejecución de estas celdas no produce ninguna salida (por lo general, es un formato poco
utilizado).

21/87
Fundamentos de Python

Figura 20. Jupyter Notebook. Sección “Cell”.

Fuente: elaboración propia.

22/87
Fundamentos de Python

Kernel

Esta es una de las secciones más importantes, ya que se encarga de mantener activo el kernel de Python. A
través de esta sección podremos pararlo, reiniciarlo, reiniciar y limpiar los output de las celdas, reiniciar y
ejecutar todas las celdas, reconectar y apagar el kernel.

Siempre que se interrumpa la actividad del kernel, todas las variables que estuvieran almacenadas en memoria
se borrarán.

Figura 21. Jupyter Notebook. Sección “Kernel”.

Fuente: elaboración propia.

Además de las secciones explicadas anteriormente, existen otras secciones no tan comunes que no es
necesario exponer en este momento; no obstante, es importante prestar especial atención a otros elementos
importantes de la interfaz de un notebook, que son los siguientes.

Botonera principal

En ella podremos encontrar los botones principales para poder gestionar el notebook y sus celdas, como
guardar el notebook, añadir, cortar, copiar y pegar celdas, moverlas de posición, así como ejecutar una celda
del notebook o parar la ejecución. Al igual que en la sección “ Cell”, podremos definir el tipo de celda que
queremos implementar a través del menú desplegable.

Figura 22. Jupyter Notebook. Botonera principal.

Fuente: elaboración propia.

23/87
Fundamentos de Python

Celda o chunk

D entro de una celda, escribiremos el código fuente que queramos implementar en Python, comentarios o
anotaciones markdown. A medida que vayamos ejecutando celdas, dentro del apartado “ In [ ]” podremos ver el
seguimiento del código, ya que dentro de este apartado se guarda el orden en el que se han ido ejecutando las
celdas.

Figura 23. Jupyter Notebook. Celda.


Fuente: elaboración propia.

Finalmente, antes de comenzar con la programación en Python, es importante ver algunas de las principales
anotaciones que podemos realizar a través de “Markdown”:

24/87
Fundamentos de Python

Encabezados

Podemos realizar tres niveles principales.

“#”: encabezado de primer nivel.


“##”: encabezado de segundo nivel.
“###”: encabezado de tercer nivel.

Figura 24. Jupyter Notebook. Encabezados markdown (I).

Fuente: elaboración propia.

Figura 25. Jupyter Notebook. Encabezados markdown (II).

Fuente: elaboración propia.

25/87
Fundamentos de Python

Listas no numeradas

Podemos realizarlas con cualesquiera de los símbolos “+”, “-“ y “*”.

Figura 26. Jupyter Notebook. Listas no enumeradas (I).

Fuente: elaboración propia.

Figura 27. Jupyter Notebook. Listas no enumeradas (II).

Fuente: elaboración propia.

26/87
Fundamentos de Python

Listas enumeradas

Tenemos que introducir el número seguido de un punto: “n.”.

Figura 28. Jupyter Notebook. Listas enumeradas (I).

Fuente: elaboración propia.

Figura 29. Jupyter Notebook. Listas enumeradas (II).

Fuente: elaboración propia.

Estilos de texto

Negrita: escribir dos asteriscos o dos guiones bajos.


Cursiva: escribir un asterisco o un guion bajo.

Figura 30. Jupyter Notebook. Estilos de texto (I).

Fuente: elaboración propia.

Figura 31. Jupyter Notebook. Estilos de texto (II).

Fuente: elaboración propia.

27/87
Fundamentos de Python

Si se desea, puede descargarse el código que se vio con anterioridad a través de los
siguientes enlaces:

Markdown_basicos.ipynb
Markdown_basicos.html

V. Sintaxis básica de Python

5.1. Declaración de variables

Para seguir esta sección se recomienda hacer uso de los siguientes archivos:

Sintaxis_Python.ipynb
Sintaxis_Python.html

Mediante el archivo Sintaxis_Python.html se verá el contenido de todo el notebook, tanto el código como los
resultados; además es posible modificarlo.

Por otro lado, mediante el archivo Sintaxis_Python.ipynb se podrá modificar el notebook y el código incluido en
este, así como ejecutar las diferentes celdas para visualizar resultados. Para abrir el archivo en primer lugar será
necesario buscar la ruta del archivo y hacer clic en él, después, desde Anaconda Navigator, automáticamente
aparecerá todo el contenido de este.

Para declarar una variable en Python, simplemente tomaremos el nombre de una variable y le asignaremos un valor
con el operador “=”.

Por ejemplo:

a=5
b = 2.32
c = ‘Hola’

Para mostrar el valor de una variable, basta con escribir el nombre de la misma, utilizar la función “print()” y escribir
dentro de los paréntesis el nombre de la variable.

28/87
Fundamentos de Python

Figura 32. Declaración de variables

Figura 32. Declaración de variables.

Fuente: elaboración propia.

5.2. Comentarios
Python dispone de dos tipos principales de comentarios:

De una línea

Simplemente se coloca “#” antes del código que se quiera comentar.

Multilínea

Se utilizan tres dobles comillas (“ “ “) para abrir el comentario. Este no finaliza hasta que volvemos a introducir
otras tres comillas (“ “ “). Este tipo de comentario es muy útil para documentar la ayuda de una función. Si en vez
de utilizar este tipo de comentarios dentro de una función, se utilizan estos comentarios en una celda normal,
Python lo interpretará como una cadena de texto.

29/87
Fundamentos de Python

Dentro de una celda, podemos comentar varias líneas de código si las seleccionamos y
pulsamos “CNTRL + /”. Es importante destacar que todas las líneas que hayamos seleccionado
pasarán a ser comentarios de una línea (con el símbolo “#”).

Figura 33. Comentarios en Python

Figura 33. Comentarios en Python.

Fuente: elaboración propia.

5.3. Operadores
Se utilizan para poder comparar y asignar variables, los operadores más importantes de Python se reparten en las
siguientes categorías:

Operadores aritméticos

Sirven para realizar operaciones entre dos variables, para devolver un resultado.

Operadores de asignación

Sirven para realizar una asignación, lo que crea una nueva variable; o realizan una operación aritmética sobre
una nueva variable ya existente.

30/87
Fundamentos de Python

Operadores de comparación

Sirven para comparar el valor de una expresión entre dos variables y devuelven un valor booleano.

Operadores de identidad

Sirven para expresar si existe igualdad entre dos variables y devuelven un valor booleano.

Operadores de pertenencia

Sirven para expresar si una cadena de texto está dentro de otra cadena de texto y devuelven un valor booleano.

A continuación, mostraremos una tabla para cada tipo de operador en función de su categoría.

Operadores aritméticos

Tabla 1. Operadores aritméticos

Operadores aritméticos

Operación Código

Suma a+b

Resta a–b

Multiplicación a*b

División real a/b

Resto o módulo a%b

Exponencial a ** b

División entera a // b

Tabla 1. Operadores aritméticos.

Fuente: elaboración propia.

31/87
Fundamentos de Python

Figura 34. Operadores aritméticos.

Fuente : elaboración propia.

Operadores de asignación

Tabla 2. Operadores de asignación

32/87
Fundamentos de Python

Operadores de asignación

Operación Código Equivalencia

Asignación a=b

Suma a += b a=a+b

Resta a –= b a=a-b

Multiplicación a *= b a=a*b

División real a /= b a=a/b

Resto o módulo a %= b a=a%b

Exponencial a **= b a = a ** b

División entera a //= b a = a // b

Tabla 2. Operadores de asignación.

Fuente: elaboración propia.

33/87
Fundamentos de Python

Figura 35. Operadores de asignación.

Fuente: elaboración propia.

Operadores de comparación

Tabla 3. Operadores de comparación

34/87
Fundamentos de Python

Operadores de comparación

Comparador Código

Mayor que x>y

Menor que x<y

Mayor o igual que, menor o igual que x >= y , x <= y

Igual que x == y

Distinto que x != y

And x > y and x < z

Or x > y or x < z

Not not(x > y and x < z) , not(x > y or x < z)

Tabla 3. Operadores de comparación.

Fuente: elaboración propia.

35/87
Fundamentos de Python

Figura 36. Operadores de asignación(I).

Fuente: elaboración propia.

36/87
Fundamentos de Python

Figura 37. Operadores de asignación (II).

Fuente: elaboración propia.

Operadores de identidad

Tabla 4. Operadores de identidad

Operadores de identidad

Comparador Código

Is x is y

Is not x is not y

Tabla 4. Operadores de identidad.

Fuente: elaboración propia.

37/87
Fundamentos de Python

Figura 38. Operadores de identidad.

Fuente: elaboración propia.

Operadores de pertenencia

Tabla 5. Operadores de pertenencia

Operadores de pertenencia

Comparador Código

In ‘a’ in ‘hola’

Not in ‘a’ not in ‘hola’

Tabla 5. Operadores de pertenencia.

Fuente: elaboración propia.

Figura 39. Operadores de pertenencia.

Fuente: elaboración propia.

38/87
Fundamentos de Python

Una vez vistos los principales tipos de operadores y qué operaciones podemos realizar con ellos, es el momento
de conocer cuáles son los principales tipos de variables en Python y, además, descubrir cómo conocer el tipo de
una variable.

5.4. Tipos de variables


Como en casi todos los lenguajes de programación, Python cuenta con los principales tipos de variables con los
que podemos trabajar, que se reparten en tres categorías:

Numéricas: dentro de esta categoría podemos encontrar dos tipos de números que podemos declarar como
variables.

Enteros.
Decimales.

Cadenas de texto.

Booleanos: representan los valores verdadero (True) o falso (False).

39/87
Fundamentos de Python

Figura 40. Tipos de variable

Figura 40. Tipos de variable.

Fuente: elaboración propia.

Cada tipo de variable se representa con una clase en Python. Hay que tener en cuenta que las estructuras de datos
también cuentan con una clase de Python y que los paquetes que importemos contarán con tipos especiales de
clases.

Para conocer el tipo de una variable haremos uso de la función “type()”. Los tipos básicos de variables se
representan con las siguientes clases:

“type(8) #” devolverá “int”.

“type(5.2852) #” devolverá “float”.

“type(‘ Hola mundo !’) #” devolverá “str”.

“type(True) #” devolverá “bool”.

40/87
Fundamentos de Python

Figura 41. Clases de variables.

Fuente: elaboración propia.

VI. Herramientas para control de flujo

Uno de los aspectos fundamentales que debemos cuidar a la hora de desarrollar, ya sea en
Python o en cualquier otro lenguaje de programación, es el flujo del programa. Esto
garantizará que las variables se procesen de forma correcta, hasta obtener los resultados
deseados.

Las estructuras de control de flujo que se verán a continuación permiten tomar decisiones acerca de cómo debe
continuar la ejecución de un programa.

Las de tipo condicional utilizan expresiones del tipo si (condición), entonces (acción).

Otras utilizan bucles que permiten continuar ejecutando una operación, bien hasta que se cumple una cierta
condición, bien mientras se cumpla una cierta condición.

Se recomienda seguir el contenido de esta sección mediante los siguientes notebooks.

41/87
Fundamentos de Python

Se recomienda seguir el contenido de esta sección mediante los siguientes notebooks.

Herramientas_control_flujo.ipynb
Herramientas_control_flujo.html

6.1. Condicionales
Este tipo de estructura de control se basa en la utilización de los operadores booleanos (de comparación,
vistos anteriormente). El funcionamiento se rige por la construcción de una expresión booleana. Si (if) esta
expresión se cumple, realizamos una acción; si no (else), se cumple otra acción.

El tipo más básico que podemos encontrarnos es un if simple. En donde, si se cumple la expresión booleana,
realizamos una acción. Si esta expresión no se cumple, simplemente no hacemos nada.

Figura 42. If simple.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

Figura 43. Código If simple.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

42/87
Fundamentos de Python

Cuando no se cumple la expresión booleana, se continúa el flujo del programa hacia el “si no” (else). En un if
simple se añadiría la estructura if – else.

Figura 44. If - else simple.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

En el ejemplo anterior, si no se cumple la expresión booleana, no ocurre nada. Para especificar esta acción,
existe una palabra reservada, que es “pass”; indica que continúa la ejecución del programa sin hacer nada. Por
defecto se realiza ante la ausencia de un else, pero es aconsejable su uso para mejorar la legibilidad de los
programas. El ejemplo anterior sería equivalente añadiendo else – pass de la siguiente manera.

Figura 45. If -else –pass.

Fuente: elaboración propia.

43/87
Fundamentos de Python

Otro ejemplo posible sería el siguiente: determinar si un número es par o impar. En esta ocasión, se utilizaría el
operador aritmético “%” para resto o módulo. Si el resultado es 0, un número será par; de lo contrario, impar.

Figura 46. Ejemplo par, impar.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

Otro tipo de condicional es el encadenado. Esta estructura de control se basa en que si la expresión booleana
no se cumple, se abre una nueva expresión booleana como un nuevo if; si se requiere, pueden abrirse n nuevas
expresiones booleanas hasta que lleguemos a else, que significa la finalización del if – elif – else.

Figura 47. Condicional encadenado.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

44/87
Fundamentos de Python

Figura 48. Código condicional encadenado.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

El último condicional que se puede construir es condicional anidado. Este tipo se basa en incluir un condicional
dentro de un condicional.

Figura 49. Condicional anidado.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

45/87
Fundamentos de Python

Figura 50. Código condicional anidado.

Fuente: Python para todos, capítulo tres: “Ejecución condicional”. [En línea] URL disponible en: http://do1.dr-chuc
k.com/pythonlearn/ES_es/pythonlearn.pdf

6.2. Bucles
Algo muy habitual durante el desarrollo es tener que realizar una misma operación varias veces; para ello, existen
los bucles, que es donde se puede realizar iterativamente una operación.

Por ejemplo, si estamos explorando un dataset, es bastante probable que queramos aplicar
una misma operación en cada fila de los datos. Los principales bucles que vamos a utilizar son
bucle for y bucle while.

6.2.1. Bucle for

El bucle for se basa en realizar de forma secuencial una misma tarea tantas veces como longitud tenga el tamaño
de la secuencia.

Su estructura es la siguiente

for índice in secuencia:

Nótese que, en este caso, índice y secuencia serán variables definidas por el usuario. La variable índice sirve para
denotar la posición en el bucle for. Por ejemplo, si queremos imprimir los números del 1 al 10, el número de índice
sería 1, 2, […], 10.

46/87
Fundamentos de Python

Para entender mejor el funcionamiento de este bucle, propondremos algunos ejemplos.

Figura 51. Ejemplo de bucle for (I).

Fuente: elaboración propia.

Para el siguiente ejemplo, utilizaremos la función “range()”, la cual toma un número como parámetro y genera
una secuencia de números del cero a n.

Figura 52. Ejemplo de bucle for (II).

Fuente: Elaboración propia.

47/87
Fundamentos de Python

Para combinar algunas partes del temario ya vistas, se propone un ejercicio en el cual, a través de una
secuencia del cero al diez, se determine si el número es par, se muestre su exponencial de dos y, si no, que lo
divida entre dos.

Figura 53. Ejemplo de bucle for (III).

Fuente: elaboración propia.

48/87
Fundamentos de Python

Al igual que los condicionales, los bucles for también pueden anidarse. Para ver esto en un ejemplo sencillo, se
propondrá el ejemplo de un programa que realice la tabla de multiplicar del uno al nueve. Para ello, se tendrá en
cuenta que el primer bucle for primero recorrerá el ítem uno; posteriormente, nos encontraremos el segundo
bucle for anidado que provocará que el ítem se vaya calculando de nuevo del cero al nueve. Para añadir un
pequeño condicionante, no se mostrará la tabla del cero.

Figura 54. Ejemplo bucle for anidado.

Fuente: elaboración propia.

Como puede comprobarse en el ejemplo anterior, el concepto más importante es que los bucles anidados se
ejecutan de abajo a arriba, es decir: el primer bucle for no cambia al siguiente elemento hasta que el bucle for
anidado finaliza todo su recorrido.

6.2.2. Bucle while

En este caso, este bucle se basa en realizar una misma acción hasta que una expresión booleana definida
por el usuario no se cumpla. Se propone un ejemplo muy sencillo: mientras el valor numérico de una variable
(con valor “1”) no sea igual a “10”, imprimiremos “ERROR !” en cada iteración y sumaremos uno al valor actual de la
variable.

49/87
Fundamentos de Python

Figura 55. Ejemplo de bucle while.

Fuente: elaboración propia.

Como se puede observar, cuando el bucle while finaliza su procesamiento, se puede añadir la sentencia de
control else para realizar una acción diferente.

Se utilizará una nueva función: “input()”. Esta función sirve para solicitar al usuario por teclado una cadena de
texto. En el siguiente ejercicio, mientras el usuario no teclee la cadena de texto “‘fin’”, el programa seguirá
solicitando la entrada de una nueva cadena de texto.

Figura 56. Ejemplo de bucle while e input.

Fuente: elaboración propia.

50/87
Fundamentos de Python

VII. Estructuras de datos


Ya se ha visto el proceso para declarar variables de diferentes tipos, cambiar su valor mediante operadores,
controlar el flujo de un programa a través de herramientas de control y realizar iteraciones a través de bucles.
Python ofrece muchas facilidades a la hora de trabajar con datos, lo que resulta especialmente útil en el campo de
la ciencia de datos. En esta sección se muestran cuáles son las principales opciones de Python para este fin.

Se recomienda seguir el contenido de esta sección a través de los siguientes notebooks:

Estructuras_datos.ipynb
Estructuras_datos.html

7.1. Tuplas
Se trata de la estructura de datos más básica. Toda la información se almacena entre paréntesis y separada por
comas.

Presentan la siguiente estructura:

(ítem_1, ítem_2, … , ítem_n)

También es posible anidar tuplas:

( (1, 3, 90), (4, 5, 9, 2.32, ‘hello’) )

Es importante recalcar que las tuplas soportan diferentes tipos de datos y que es posible la
creación de tuplas con elementos de diferente longitud.

51/87
Fundamentos de Python

Figura 57. Definición de una tupla

Figura 57. Definición de una tupla.

Fuente: elaboración propia.

Las tuplas presentan algunas características mencionadas a continuación:

Soportan indexación

Es decir: podemos acceder a los contenidos en la tupla indicando sus índices entre corchetes ([ ]). Es
importante que sepamos que los índices de las tuplas comienzan en “0” y no en “1”.

Figura 58. Índice de una tupla.

Fuente: elaboración propia.

52/87
Fundamentos de Python

No son mutables

Es decir, no podemos cambiar un valor de una tupla. Nos devolverá un error.

Figura 59. Modificación de una tupla.

Fuente: elaboración propia.

En Python, las tuplas tienen una clase propia, que es “tuple”

Figura 60. Clase de una tupla.

Fuente: Elaboración propia.

7.2. Listas
De un modo similar a una tupla, una lista es una secuencia de valores. También acepta valores de cualquier tipo.
En este caso, su representación es entre corchetes ([ ]) y todos sus valores separados por comas.

53/87
Fundamentos de Python

Algunos ejemplos de lista serían:

mi_lista = [1, 3, 89, 23]


mix_list = [‘hola’, 51, 8.23, 2, ‘cadena’]

Figura 61. Ejemplos de listas.

Fuente: elaboración propia.

Anidables

Al igual que las tuplas, las listas también se pueden anidar.

Figura 62. Lista anidada.

Fuente: elaboración propia

54/87
Fundamentos de Python

Mutables

Una de las grandes ventajas, además de poder manejarlas a través de sus índices, es que también podemos
cambiar su valor a través de su índice, es decir: son mutables.

Figura 63. Índices de una lista.

Fuente: elaboración propia

En el trabajo con datos, son sin duda una de las estructuras de datos más utilizadas, principalmente por la amplia
gama de funciones que permiten realizar sobre las mismas. Describimos las más importantes:

55/87
Fundamentos de Python

“append”

Permite añadir un nuevo elemento a una lista.

Figura 64. Lista “append”.

Fuente: elaboración propia.

“clear”

Borra por completo todos los elementos de una lista, lo que deja una lista vacía.

Figura 65. Lista “clear”.

Fuente: elaboración propia.

56/87
Fundamentos de Python

“copy”

Permite copiar una lista. Es importante añadir que, si simplemente asignamos una lista a una variable, ambas
compartirán las posiciones de memoria; así pues, para evitar este problema, conviene usar la opción “copy”.

Figura 66. Lista posiciones de memoria.

Fuente: elaboración propia.

Figura 67. Lista “copy”.

Fuente: elaboración propia.

57/87
Fundamentos de Python

“extend”

Añade los elementos de una lista al final de otra.

Figura 68. Lista “extend”.

Fuente: elaboración propia.

“index”

Devuelve la posición de índice de un valor. Evidentemente, si el valor no existe, mostrará un error.

Figura 69. Lista “index”.

Fuente: elaboración propia.

“insert”

Añade un elemento en una posición específica.

Figura 70. Lista "insert".


Fuente: elaboración propia.

58/87
Fundamentos de Python

“pop”

Borra un elemento en una posición específica.

Figura 71. Lista “pop”.

Fuente: elaboración propia.

“remove”

Borra el elemento con un valor específico.

Figura 72. Lista “remove”. Fuente: elaboración propia.

“reverse”

Invierte el orden de una lista.

Figura 73. Lista “reverse”.

Fuente: elaboración propia.

59/87
Fundamentos de Python

“sort”

Ordena los valores de una lista.

Figura 74. Lista “sort”.

Fuente: elaboración propia.

Uno de los aspectos más importantes a la hora de trabajar con listas es saber cómo iterar y recorrer sus elementos;
para ello, lo más habitual suele ser utilizar el bucle for. Las dos formas más comunes son:

Recorrer directamente el elemento.

Recorrer los elementos por índice utilizando la función “range”.

60/87
Fundamentos de Python

Veamos un par de ejemplos.

Figura 75. Recorrer lista por elemento.

Fuente: elaboración propia.

Figura 76. Recorrer lista por índice.

Fuente: elaboración propia.

Es importante enfatizar en que la función “range” nos permite generar una secuencia de números, pero no
siempre desde cero a n; por lo tanto, si no queremos procesar n elementos de la lista, podemos hacer lo
siguiente: en este caso, procesaremos únicamente del índice “2” al final de la lista.

61/87
Fundamentos de Python

Figura 77. Recorrer lista por índice, variación en “range”.

Fuente: elaboración propia.

Finalmente, podemos ver cómo una lista también tiene una clase propia.

Figura 78. Clase de una lista.

Fuente: elaboración propia.

7.3. Diccionarios de datos


Diccionarios de datos

Son una de las estructuras más rápidas en lo que a procesamiento se refiere. Tal y como hemos visto, los
índices de las listas son números enteros del 0 a n (final de la lista). En este caso, en los diccionarios, un índice
puede ser también un string u otro tipo de identificador, siempre y cuando se cumpla una regla básica.
Estos índices son únicos, así que no pueden repetirse.

La estructura que presenta un diccionario de datos, es que todos los datos van entre llaves ({ }) y cualquier valor
viene precedido por un campo clave, lo que resulta de la siguiente manera: { Clave : Valor }

Figura 79. Diccionario de datos.

Fuente: elaboración propia.

62/87
Fundamentos de Python

Los diferentes ítems de un diccionario de datos se irán separando por comas: { Clave_1: Valor_1, Clave_2 :
Valor_2, … , Clave_n, Valor_n }

Figura 80. Elementos de un diccionario de datos.

Fuente: elaboración propia.

63/87
Fundamentos de Python

Del mismo modo que hemos visto que las tuplas y las listas pueden anidarse, los diccionarios de datos
también. En este caso, una clave contiene como campo de valor un nuevo diccionario.

{ clave : {sub_clave : valor_1,

sub_clave_2 : valor_2,

…,

sub_clave_n : valor_n }

clave_2 : valor }

Figura 81. Diccionario anidado.

Fuente: elaboración propia.

Existen dos funciones principales para poder acceder tanto a los campos clave como a los campos valor que son
“keys()” y “values()”.

64/87
Fundamentos de Python

“keys()”

Figura 82. Campos clave.

Fuente: elaboración propia.

“values()”

Figura 83. Campos valor.

Fuente: elaboración propia.

65/87
Fundamentos de Python

Buscar un campo clave

Como hemos podido comprobar, tanto los valores como las claves son listas, por lo tanto, cuando
queramos saber si un ítem es un campo clave, podemos buscarlo como si de una lista se tratase. Si el campo
se encuentra en el diccionario, nos devolverá su valor; de lo contrario, mostrará un error.

Figura 84. Buscando campo clave.

Fuente: elaboración propia.

Figura 85. Función get.

Fuente: elaboración propia.

Borrar todo el diccionario

Al igual que en las listas, con la función “.clear” podemos borrar todo el diccionario.

Figura 86. Función clear.

Fuente: elaboración propia.

66/87
Fundamentos de Python

Borrar un campo completo

Si queremos borrar un campo completo, podemos realizarlo a través de la función “.pop”, a la cual le pasaremos
como argumento el campo clave.

Figura 87. Función pop.

Fuente: elaboración propia.

Eliminar elementos

Otra función con la que podemos eliminar elementos de un diccionario de datos, es “.popitem”. A través de esta
función, borraremos el último elemento insertado.

Figura 88. Función popitem.

Fuente: elaboración propia.

67/87
Fundamentos de Python

Añadir nuevos elementos

Finalmente, podemos añadir nuevos elementos a un diccionario con la función “.update”.

Figura 89. Función update.

Fuente: elaboración propia.

Como ya hemos visto con el resto de estructuras de datos, un diccionario de datos tiene una clase propia: dict.

Figura 90. Clase de un diccionario.

Fuente: elaboración propia.

VIII. Funciones

8.1. Funciones
Las funciones de Python son muy importantes a la hora de estructurar el código de una manera profesional.

Deberán utilizarse siempre que tenga sentido, por ejemplo, si se está repitiendo el mismo
bloque de código continuamente a lo largo de un programa, probablemente se debería estar
encapsulando ese código dentro de una función.

¿Qué es una función?

Básicamente, una función es un fragmento o bloque de código que solamente se ejecuta cuando este es
llamado. A cualquier función le podemos pasar parámetros de entrada o argumentos y devolver resultados
como parámetros de salida.

68/87
Fundamentos de Python

Se recomienda seguir el contenido de esta sección a través de los siguientes notebooks:

FUNCIONES.ipynb
FUNCIONES.html

8.2. Cómo definir y llamar funciones


Para definir una función, utilizaremos la palabra clave def seguida del nombre que otorgaremos a dicha
función y cualquier parámetro de entrada entre paréntesis y separados por comas.

Empezaremos por la función más básica, una en la que no utilicemos parámetros de entrada ni de salida.

def saludar():

print('Hola !')

saludar()

Figura 91. Función básica.

Fuente: elaboración propia.

69/87
Fundamentos de Python

Ahora, probaremos a añadir un argumento. Es importante señalar que ahora, cuando llamemos a la función,
tendremos que utilizar el nombre del argumento como entrada y el valor que pasaremos a este argumento.

def saluda_nombre(nombre):

print('Hola', nombre, '!')

saluda_nombre(nombre='Juan')

Figura 92. Función con un parámetro.

Fuente: elaboración propia.

Añadir más de un parámetro simplemente hará que tengamos que pasar más información a nuestra función.

def aplica_iva(nombre_artículo, precio):

print('El precio total de', nombre_artículo, 'es: ', round(precio + (precio*0.21),2))

aplica_iva(nombre_artículo='NVIDIA GTX 2080', precio=2045)

Figura 93. Función con más de un parámetro.

Fuente: elaboración propia.

70/87
Fundamentos de Python

Cuando queremos devolver algún resultado a través de una función, haremos uso de la palabra clave return. Si
devolvemos más de un resultado, estos irán separados por comas.

def obten_precio_total(precio):

precio_final = round(precio + (precio * 0.21), 2)

return precio_final

precio_total = obten_precio_total(precio=2000)

print('El precio final del artículo es: ', precio_total, 'euros')

Figura 94. Función con parámetro de salida.

Fuente: elaboración propia.

8.3. Ejemplo del uso de funciones


Para ejemplificar cómo devolver más de un parámetro de salida, se propone el siguiente programa: dada una
secuencia de números, almacenar todos los números pares en una lista y todos los impares en otra. Devolver
ambas listas.

71/87
Fundamentos de Python

# Dada una secuencia de números.

# Almacenar todos los números pares en una lista.

# Todos los números impares en otra lista

# Devolver ambas listas

def pares_impares(numbers):

# Inicializamos lista pares e impares

pares = []

impares = []

for item in numbers:

if item % 2 == 0:

# Es par

pares.append(item)

else:

# Es impar

impares.append(item)

return pares, impares

tupla_números = (1, 8, 23, 0, 199, 457, 398, 5, 9, 150, 780, 7592)

lista_pares, lista_impares = pares_impares(numbers=tupla_números)

print('Todos los números pares de la secuencia son:', lista_pares)

print('Todos los números impares de la secuencia son:', lista_impares)

72/87
Fundamentos de Python

Figura 95. Función con más de un parámetro de salida.

Fuente: elaboración propia.

8.4. Llamar funciones dentro de una funciones


Del mismo modo que podemos procesar información y transformar variables en una función, podemos también
llamar funciones dentro de una función.

73/87
Fundamentos de Python

def banner():

print('-'*20)

print('*'*20)

print('-'*20)

def programa_principal():

banner()

print('Iniciando el programa... \n')

banner()

print('Saliendo del programa')

programa_principal()

Figura 96. Llamada a función en una función.

Fuente: elaboración propia.

74/87
Fundamentos de Python

Finalmente, una vez visto cómo se pasan uno o más parámetros de entrada y cómo se devuelve uno o más
parámetros de salida, es importante hablar del bloque main.

Especialmente cuando trabajamos con notebooks, es importante definir el cuerpo principal


del programa, que será la función del bloque main, es decir: todo lo que incluyamos bajo el
bloque main se ejecutará de forma secuencial.

Por lo tanto, es importante definir en primera instancia todas las funciones necesarias para la ejecución del
programa y, en último lugar, el bloque main, que se define como:

if __name__ == '__main__':

# Llamada a funciones

Para ilustrar el funcionamiento del bloque main, implementaremos el siguiente programa:

Diseñar e implementar un programa en el que el usuario introduzca frases hasta que teclee
“basta”, estas frases las almacenaremos en una lista, posteriormente, iremos almacenando en
una nueva lista todas las frases que contengan la letra “a”. Finalmente, desde el cuerpo principal
del programa, mostraremos estas frases por pantalla.

Para realizar este programa seguiremos los siguientes pasos:

75/87
Fundamentos de Python

Obtener todas las frases.

Figura 97. Función “get_phrases”.

Fuente: elaboración propia.

76/87
Fundamentos de Python

Filtrar por las frases que tengan la letra “a”.

Figura 98. Función “filter_phrases”.

Fuente: elaboración propia.

77/87
Fundamentos de Python

Función para mostrar todas las frases filtradas.

Figura 99. Función “show_filtered_pharses”.

Fuente: elaboración propia.

Crear cuerpo principal del programa.

Figura 100. Cuerpo principal.

Fuente: elaboración propia.

78/87
Fundamentos de Python

def get_phrases():

"""

Función que solicita frases al usuario hasta que

el usuario teclea 'basta'

input: None

output: list[]

"""

# Lista vacía para almacenar frases

frases = []

respuesta = input()

while respuesta != 'basta':

frases.append(respuesta)

respuesta = input()

return frases

def filter_phrases(lista_frases):

"""

Función que recibe una lista con frases y las

va filtrando iterativamente, quedándose solamente con

aquellas frases que tienen la letra 'a'

79/87
Fundamentos de Python

input: list

output: list

"""

# Definimos una nueva lista para almacenar todas las frases con

# la letra a

frases_con_a = []

for item in lista_frases:

if 'a' in item:

frases_con_a.append(item)

else:

# No hacemos nada

pass

return frases_con_a

def show_filtered_phrases(frases_filtradas):

"""

Función que devuelve iterativamente todas las

frases filtradas.

input: list

output: None

"""

80/87
Fundamentos de Python

# Utilizamos un bucle for para mostrar todas las palabras

for frase in range(len(frases_filtradas)):

print('Frase en posición {} --> {} '.format(frase, frases_filtradas[frase]))

# Como se puede comprobar aquí estamos utilizando format

# para imprimir, lo que hacemos es mostrar más ordenado

# lo que esté entre corchetes.

# No return

if __name__ == '__main__':

todas_las_frases = get_phrases()

frases_clean = filter_phrases(lista_frases=todas_las_frases)
show_filtered_phrases(frases_filtradas=frases_clean)

IX. Resumen

81/87
Fundamentos de Python

A lo largo de esta unidad, se han visto los aspectos fundamentales de la programación


Python, que es uno de los lenguajes más utilizados del mundo y uno de los más extendidos
entre los profesionales de ciencia de datos.

Se ha empezado exponiendo lo más esencial, como es la instalación de un entorno de


programación. En este caso se ha presentado Jupyter Notebook, que sirve para documentar
y programar en el mismo archivo. Posteriormente, se ha expuesto lo más básico de la
programación Python, que es la declaración de variables, cómo agregar comentarios y
trabajar con los principales operadores y saber qué tipos de variables hay y cómo podemos
trabajar con ellas. En definitiva: conocer la sintaxis básica de Python.

Posteriormente, se ha hablado sobre cómo poder controlar la ejecución de un programa a


través de las principales estructuras de control de flujo mediante las órdenes iterativas con
bucles o implementando expresiones booleanas para elaborar condicionales.

Por otro lado, se ha estudio uno de los aspectos más importantes de Python y que le han
otorgado gran popularidad entre los científicos de datos: las estructuras de datos. Además,
hemos visto las principales funcionalidades de cada una de ellas.
Finalmente, hemos aprendido cómo modularizar programas a través de funciones mediante
la escritura de parámetros de entrada y la devolución de parámetros de salida.

82/87
Fundamentos de Python

Ejercicios

Caso práctico
Ejercicio 1

Escribir una función que reciba una secuencia de números (puede ser lista o tupla y los números
pueden ser enteros o decimales) y devuelva la cantidad de números, el valor máximo, el mínimo y la
media.

Solución: EJERCICIO_1_SOLUCION.ipynb

Ejercicio 2

Escribir un programa que, partiendo de las dos siguientes listas con nombres, borre de la lista uno los
nombres de la lista dos.

lista_uno = ['Mario', 'Paula', 'David', 'Ana', 'Jorge', 'Ivan', 'Laura', 'Beatriz']

lista_dos = ['Paula', 'Francisco', 'Jorge', 'Juan', 'David']

Solución: EJERCICIO_2_SOLUCION.ipynb

Ejercicio 3

Dado el siguiente diccionario de datos:

precios = {

'ACCIONA': [78.60, 84.95, 77.20],

'ACERINOX': [5.88, 51.25, 58.42],

'INDITEX': [49.99, 57.89, 68.5],

'ENEGAS': [0.5, 0.78, 48.75],

'FERROVIAL': [78.58, 24.25, 65.45]

83/87
Fundamentos de Python

Modificar cualquier precio inferior a 50, por el valor 50 y, finalmente, devolver el diccionario de datos
actualizado por cada nombre de empresa.

Solución: EJERCICIO_3_SOLUCION.ipynb

84/87
Fundamentos de Python

Recursos

Bibliografía
Explorando la información con Python 3 :

Severance, C. Python para todos. Explorando la información con Python 3: 2016 [En línea] URL disponible
en: http://do1.dr-chuck.com/pythonlearn/ES_es/pythonlearn.pdf
Página web Anaconda :

Página web Anaconda. [En línea] URL disponible en: https://www.anaconda.com/


Página web Python :

Página web Python. [En línea] URL disponible en: https://www.python.org/


Teaching and learning with Jupyter :

Barba, L. et al. Teaching and learning with Jupyter: 2019. [En línea] URL disponible en: https://jupyter4edu.git
hub.io/jupyter-edu-book/index.html
Tutorial Python online :

Tutorial Python online. [En línea] URL disponible en: http://docs.python.org.ar/tutorial/3/index.html


Tutorial Python online :

Tutorial Python online. [En línea] URL disponible en: https://www.learnpython.org/


Tutorial Python online :

Tutorial Python online. [En línea] URL disponible en: https://www.w3schools.com/python/default.asp


Tutorial sobre Jupyter Notebook :

Tutorial sobre Jupyter Notebook. [En línea] URL disponible en: https://jupyter-notebook.readthedocs.io/en/sta
ble/notebook.html

Glosario.
Anaconda: Distribución open source dedicada a lenguajes de programación científica como python y r.
Para simplificar la gestión de paquetes y versiones, todo se realiza desde el sistema de gestión de
paquetes conda.

Bucle for: Herramienta de control dedicada a procesar información de manera iterativa. Un bucle for toma
como punto de inicio y de parada un número entero. Durante cada secuencia en un bucle for, se realiza la
misma acción.

Bucle while: Herramienta de control en forma de bucle que sirve para realizar constantemente (de forma
iterativa) la misma acción hasta que se cumpla una expresión booleana.

Campo clave: Elemento único de los diccionarios de datos. Se trata del identificador único para cada
valor.

85/87
Fundamentos de Python

Campo valor: Elemento único de los diccionarios de datos. Se trata del valor que toma cada posición de
un diccionario. Cualquier campo valor viene precedido por un campo clave.

Celda o chunk: Fragmento de código que puede ser ejecutado por separado. De esta manera se puede
dividir el código de un notebook.

Clase: Abstracción de un programa en donde se definen diferentes atributos o propiedades de un objeto,


de manera semejante a la vida real, en donde cada objeto tiene sus propias características.

Compilar un programa: Procesar todo el código fuente para que este sea entendible por una máquina.
Una vez realizado el proceso, el programa puede ejecutarse tantas veces como sea necesario en un tiempo
menor que un lenguaje de programación interpretado.

Condicional if-else: Herramienta de control estructurada con base en una expresión booleana en la que si
(if) la condición se cumple, se realiza una parte del código o una acción, y si no (else) se cumple, se realiza
otra acción.

Diccionario de datos: Estructura de datos en la cual los datos están distribuidos entre llaves en forma de
clave, valor.

Entrada de parámetros: Parámetros que son necesarios para el funcionamiento de una variable que serán
tratados dentro del cuerpo de la función.

Estructura de datos: Elementos sobre los que se pueden almacenar variables para su posterior
tratamiento. En python se distinguen tuplas, listas y diccionarios de datos.

Flujo de control: Conjunto de herramientas que ayudan a diseñar el orden de un programa. Se pueden
definir ciertas acciones a través de expresiones booleanas o procesos iterativos.

Función: Bloque de código que se ejecuta únicamente cuando es llamado dentro de un programa. Una
función puede no recibir ningún parámetro o recibir de uno a n parámetros. Una función puede no devolver
ningún parámetro de salida o devolver de uno a n parámetros de salida.

Índice: Característica principal de las listas y cadenas de texto. Un índice almacena cada valor de una lista
o cada caracter de una cadena de texto. Comienza en la posición cero hasta la longitud de la lista o cadena.
De esta manera, se puede acceder a una posición específica del índice, lo que se conoce como indexar.

Intérprete: Se encarga de procesar un programa escrito en código fuente entendible por el intérprete, es
decir, cualquier programa de Python se interpreta a través del intérprete de Python.

Jupyter Notebook: Entorno de desarrollo software para python, r, julia y más de 100 lenguajes de
programación. Se caracteriza por ser un entorno de desarrollo interactivo que permite, desde un navegador
web, documentar un programa, escribir código fuente y comentarios y guardar, incluso, los resultados o
notebooks o cuadernos.

Kernel: En jupyter notebook, un kernel es un programa responsable de manejar las diferentes solicitudes de
ejecución de código y depuración de código.

Lenguaje interpretado: Lenguaje de programación cuyo código no necesita ser preprocesado a través de
un compilador, es decir> toda la ejecución del código se realiza en tiempo real a través del intérprete.

Librería: Conjunto de funciones para un lenguaje de programación empaquetadas en una única solución.

86/87
Fundamentos de Python

Lista: Estructura de datos en la que los elementos están encerrados entre corchetes y separados por
comas. Pueden alterarse los valores de cada una de las posiciones de una lista. A cada una de estas
posiciones se le denomina índice.

Multiplataforma: Aplicación o programa software que puede ser utilizado en diferentes sistemas
operativos.

Operador: Funciones predefinidas sobre las que podemos alterar el valor almacenado en una variable. Los
operadores nos permiten aplicar funciones matemáticas, comparativas y booleanas sobre una variable.

Orientación a objetos: Se trata de un paradigma de la programación en la que el código puede ser


organizado en clases. Cada clase tendrá una serie de variables propias que interactúan con el programa.
De alguna forma se asemeja a representar objetos del mundo real, donde cada objeto tiene sus propias
características.

Programación modular: Programación en la que el código puede dividirse en módulos o subprogramas


con el objetivo de mejorar el procesamiento, aumentar la tolerancia a errores y hacer más fácil la gestión y
legibilidad del código fuente.

Python: Lenguaje de programación orientado a objetos. Se puede trabajar con estructuras de datos de alto
nivel y una sintaxis elegante y simple.

Salida de parámetros: Conjunto de variables creadas dentro de una función, que deben ser almacenadas
a través de una nueva variable fuera de la función al finalizar su ejecución.

Tipado dinámico: Un lenguaje de programación posee tipado dinámico si una variable puede tomar
valores de diferente tipo como, por ejemplo, que inicialmente se haya creado como tipo entero y,
posteriormente, pueda tomar valor numérico en coma flotante (decimal).

Tupla: Estructura de datos que se caracteriza por tener todos sus valores encerrados entre paréntesis y
separados por comas. No es mutable, es decir, sus valores no se pueden cambiar.

Variable: Elemento en el que guardamos un valor para su posterior procesamiento. Una variable puede ser
modificada.

87/87

You might also like