UD2 Fundamentos Python
UD2 Fundamentos Python
I. Introducción y objetivos
VII. Funciones
VIII. Resumen
X. Glosario
XI. Bibliografía
Lección 1 de 11
I. Introducción y objetivos
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.
C O NT I NU A R
7 Trabajar con las principales estructuras de datos en Python: tuplas, listas y diccionarios de datos.
El 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 mundo2.
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.
La evolución de Python3 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 este enlace.
3 Página principal de la comunidad Python. [En línea] URL disponible en este enlace.
Lección 3 de 11
0:00 / 27:01 1x
Principalmente, tiene compatibilidad con tres lenguajes de programación4: 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 este enlace.
C O NT I NU A R
ventajas que ofrece para la enseñanza, utilizaremos Jupyter Notebook; para ello, descargaremos una distribución de Anaconda5, 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:
Accedemos a la web de Anaconda Distribution. [En línea] URL disponible en este enlace.
2
Pulsamos en el botón “Download” y nos llevará a la siguiente sección de descargas para descargar una
versión de Python.
3
Descargaremos la versión de Python 3.7; para ello, simplemente pulsamos en el botón verde “Download”.
4
Automáticamente, comenzará la descarga del archivo ejecutable que contendrá la distribución de Anaconda.
5
Seleccionamos el tipo de instalación (puede dejarse por defecto para que se descargue únicamente en
nuestro usuario).
9
Seleccionamos la ruta de instalación (se recomienda utilizar la que aparece por defecto).
10
Si lo deseamos, marcamos las opciones para aprender más sobre Anaconda y los primeros pasos con
Anaconda, y pulsamos “Finish”.
NOTA: Para instalar Jupyter Notebook en un sistema operativo diferente de Windows, seguir las instrucciones de la
documentación oficial, disponibles en el siguiente enlace.
C O NT I NU A R
Una vez ha finalizado la instalación de Anaconda, mostraremos cómo lanzar en el navegador web nuestro primer notebook en Python. Para ello, realizaremos los
siguientes pasos:
1
El anterior 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”.
6
Aparecerá la anterior vista con un notebook vacío. Por defecto se llamará “Untitled”.
C O NT I NU A R
“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.
2
“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.
3
“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.
4
“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:
“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).
5
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.
C O NT I NU A R
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
Celda o chunk: dentro 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.
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”:
Listas no enumeradas: podemos realizarlas con cualesquiera de los símbolos “+”, “-“ y “*”.
Figura 26. Jupyter Notebook. Listas no Figura 27. Jupyter Notebook. Listas no
enumeradas (I). enumeradas (II).
Fuente: elaboración propia. Fuente: elaboración propia.
Figura 28. Jupyter Notebook. Listas Figura 29. Jupyter Notebook. Listas
enumeradas (I). enumeradas (II).
Fuente: elaboración propia. Fuente: elaboración propia.
Estilos de texto:
Figura 30. Jupyter Notebook. Estilos de Figura 31. Jupyter Notebook. Estilos de
texto (I). texto (II).
Fuente: elaboración propia. Fuente: elaboración propia.
Si se desea, puede descargarse el código que se vio con anterioridad a través de los siguientes enlaces:
Markdown_basicos_ipynb.zip
585 B
Markdown_basicos.zip
45.1 KB
Lección 4 de 11
Sintaxis_Python_ipynb.zip
2.3 KB
Sintaxis_Python.zip
47.3 KB
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 “=”.
C O NT I NU A R
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.
Figura 32. Declaración de variables.
Fuente: elaboración propia.
C O NT I NU A R
4.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.
Truco
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 “#”).
C O NT I NU A R
4.3. Operadores
Se utilizan para poder comparar y asignar variables, los operadores más importantes de Python se reparten en las siguientes categorías:
Sirven para realizar operaciones entre dos variables,
Operadores aritméticos
para devolver un resultado.
1 of 5
2 of 5
4 of 5
5 of 5
A continuación, mostraremos una tabla para cada tipo de operador en función de su categoría.
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.
C O NT I NU A R
Numéricas: dentro de esta categoría podemos encontrar dos tipos de números que podemos declarar como variables.
Enteros.
Decimales.
Cadenas de texto.
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:
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.
Herramientas_control_flujo_ipynb.zip
1.8 KB
Herramientas_control_flujo.zip
46.7 KB
C O NT I NU A R
5.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.
1
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.
2
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.
4
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.
5
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.
6
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.
7
El último condicional que se puede construir es condicional anidado. Este tipo se basa en incluir un condicional dentro de un
condicional.
9
C O NT I NU A R
5.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.
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. 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.
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.
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.
C O NT I NU A R
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.
Lección 6 de 11
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.
Estructuras_datos_ipynb.zip
3.1 KB
Estructuras_datos.zip
48.4 KB
C O NT I NU A R
6.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:
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”.
2
No son mutables, es decir, no podemos cambiar un valor de una tupla. Nos devolverá un error.
3
C O NT I NU A R
6.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. Algunos ejemplos de lista serían:
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.
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:
1
“clear”: borra por completo todos los elementos de una lista, lo que deja una lista vacía.
3
“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”.
4
“index”: devuelve la posición de índice de un valor. Evidentemente, si el valor no existe, mostrará un error.
7
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:
2. Recorrer los elementos por índice utilizando la función “range”. Veamos un par de ejemplos.
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.
Finalmente, podemos ver cómo una lista también tiene una clase propia.
C O NT I NU A R
6.3. Diccionarios de datos
Los 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 }
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 }
Existen dos funciones principales para poder acceder tanto a los campos clave como a los campos valor que son “keys()” y “values()”.
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.
Al igual que en las listas, con la función “.clear” podemos borrar todo el diccionario.
Figura 87. Función pop.
Fuente: elaboración propia.
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.
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.
Como ya hemos visto con el resto de estructuras de datos, un diccionario de datos tiene una clase propia:
dict.
Lección 7 de 11
VII. Funciones
7.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.
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.
FUNCIONES_ipynb.zip
2.4 KB
FUNCIONES.zip
47.5 KB
C O NT I NU A R
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()
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')
3
Añadir más de un parámetro simplemente hará que tengamos que pasar más información a nuestra función.
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)
C O NT I NU A R
def pares_impares(numbers):
C O NT I NU A R
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.
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
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.
input: None
output: list[]
"""
# Lista vacía para almacenar frases
frases = []
respuesta = input()
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'
input: list
output: list
"""
# Definimos una nueva lista para almacenar todas las frases con
# la letra a
frases_con_a = []
return frases_con_a
def show_filtered_phrases(frases_filtradas):
"""
Función que devuelve iterativamente todas las
frases filtradas.
input: list
output: None
"""
# 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)
VIII. Resumen
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
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.
Lección 9 de 11
ENUNCIADO
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.
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']
EJERCICIO 3
VER SOLUCIÓN
EJERCICIO_1_SOLUCION.zip
1.3 KB
EJERCICIO_2_SOLUCION.zip
1 KB
EJERCICIO_3_SOLUCION.zip
1.7 KB
Lección 10 de 11
X. 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
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 se
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.
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
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 ne
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
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ámetr
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
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
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
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 tra
Librería
–
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 d
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, comparativ
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 co
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
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
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 p
Variable
–
Elemento en el que guardamos un valor para su posterior procesamiento. Una variable puede ser modificada.
Lección 11 de 11
XI. Bibliografía
Barba, L. et al. Teaching and learning with Jupyter; 2019. [En línea] URL disponible en este enlace.
Tutorial sobre Jupyter Notebook. [En línea] URL disponible en este enlace.
Severance, C. Python para todos. Explorando la información con Python 3; 2016 [En línea] URL disponible en este enlace.