====== Introducción a la programación con Python ======
Notas de la formación por parte de la Consellería de Promoción do Emprego e Igualdade y el [[https://formacion.clusterticgalicia.com|Clúster TIC Galicia]] impartida en 2023.
===== Objetivos =====
* Introducir los distintos entornos de desarrollo. El entorno interactivo Jupyter para ejecutar y crear programas.
* Conocer los elementos básicos del lenguaje, las estructuras de control, estructuras de datos, y elementos sintácticos específicos de Python.
* Introducir algunas de las bibliotecas más habituales del lenguaje.
* Realizar prácticas y ejercicios sencillos de programación con Python.
===== Temario =====
* **Bloque I: Introducción a Python y E/S básica**
* Mostrar mensajes por pantalla -print()
* Cadenas de texto -strings
* Introducción de datos –input()
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:variables_y_tipos_de_datos|Bloque II: Variables y tipos de datos]]**
* Variables
* Tipos de datos
* Integers
* Floats
* Conversiones entre tipos de datos
* Formatear cadenas
* Operadores matemáticos
* Redondeo
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:cadenas_de_caracteres_y_tipos_de_datos_abstractos|Bloque III: Cadenas de caracteres y tipos de datos abstractos]]**
* Método index
* Extraer substrings
* Métodos de string
* Propiedades de string
* Tipos de datos
* Listas
* Diccionarios
* Tuplas
* Sets
* Booleanos
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:sentencias_de_control|Bloque IV: Sentencias de control]]**
* Operadores de comparación
* Operadores lógicos
* Control de flujo
* Loops
* for
* while
* Rango
* Enumerador
* Zip
* Min y Max
* Random
* Comprensión de listas
* Match
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:funciones|Bloque V: Funciones]]**
* Métodos ayuda y documentación
* Crear funciones
* Return
* Funciones dinámicas
* Interacción entre funciones
* Argumentos indefinidos -* args
* Argumentos indefinidos -* kwargs
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:ficheros|Bloque VI: Ficheros]]**
* Abrir y manipular archivos
* Crear y escribir archivos
* Directorios
* Pathlib
* Path
* Limpiar la consola
* Archivos y funciones
* Ejercicios prácticos
* **[[informatica:programacion:python:cursos:introduccion_programacion_python:programacion_orientada_a_objetos|Bloque VII: Programación Orientada a Objetos]]**
* Programación orientada a objetos
* Atributos
* Métodos
* Tipos de métodos
* Herencia
* Polimorfismo
* Métodos especiales
* Ejercicios prácticos
* [[informatica:programacion:python:cursos:introduccion_programacion_python:ejemplos_practicos|Ejemplos prácticos]]
===== Software necesario =====
* [[https://www.python.org/downloads/|Intérprete y bibliotecas de Python]] (versión 3.x)
* Editor de texto o IDE. Algunas opciones:
* [[https://code.visualstudio.com/|Visual Studio Code]] (con extensión de Python)
* PyCharm
* [[https://jupyter.org/install|Jupyter]]
* Terminal (Bash, Zsh, CMD, PowerShell, ...)
* [[https://aka.ms/terminal|Windows Terminal]]
==== Jupyter Lab ====
Para instalar, desde el terminal:
python3 -m venv .venv
source .venv/bin/activate
Instalamos el módulo de Jupyter Lab:
pip install jupyterlab
Lanzamos el entorno:
source .venv/bin/activate
jupyter-lab
===== Ejercicios =====
Investigue algún paquete en https://pypi.org de entre los siguientes:
* Django
* Flask
* PyQt6
* BeautifulSoup
* Colorama
* pandas
* scikit-learn
* matplotlib
* seaborn
* SQLAlchemy
Elija uno y descríbalo, indicando los siguientes puntos:
- Nombre del paquete
- Descripción
- Fecha de publicación de la última versión
- Fecha de publicación de la primera versión
- Licencia
- Versión mínima requerida de Python
===== Cuestionario =====
**¿En qué se diferencian las listas y las tuplas de Python?**
* Las listas son inmutables, mientras que las tuplas se pueden modificar.
* **Las tuplas son inmutables, mientras que las listas se pueden modificar**
* Se comportan exactamente igual
**¿Qué secuencia de números genera ''range(5)''?**
* **0, 1, 2, 3, 4**
* 1, 2, 3, 4, 5
* 0, 1, 2, 3, 4, 5
**¿Cuántas veces se puede llegar a repetir un bucle while?**
* Una o ninguna
* 1 o más
* **0 o más**
**¿Qué representa ''self'' dentro del código de una clase en Python?**
* Define una representación textual del objeto
* Indica el nombre de la clase
* **Se refiere al mismo objeto con el que se está trabajando**.
**¿Una función puede recibir más de un parámetro opcional?**
* No, solamente se admite uno.
* **Sí, siempre que se declare después de los que son obligatorios**.
* Sí, independientemente de donde sea declarado en la lista de parámetros.
**¿Qué tipo de datos propio de Python permite asociar claves y valores?**
* Conjuntos (set)
* Tuplas (tuple)
* **Diccionarios (dict)**
**¿Cómo se puede añadir un elemento al final de una lista en Python?**
* ''listaz.add(x)''
* No se puede porque las listas son inmutables
* **''lista.append(x)''**
**Las instrucciones que se colocan después de un bloque ''else'', ¿cuándo se ejecuta?**
* Cuando la condición del ''if'' es verdadera.
* **Cuando la condición del ''if'' es falsa**.
* Incondicionalmente, sea cual sea el resultado de la condición.
**¿Qué hace la palabra clave ''break'' en un bucle?**
* **Interrumpir el bucle, continuando la ejecución en el código que está después de dicho bucle**.
* Saltarse instrucciones para continuar en la siguiente vuelta o iteracción.
* Termina forzosamente la ejecución de un programa.
**¿Qué diferencia hay entre los operadores ''%%==%%'' y ''='' en Python?**
* Son lo mismo
* Con ''%%==%%'' se asignan los valores a una variable; con ''='' se compara si son equivalentes dos expresiones.
* **Con ''='' se asignan los valores a una variable; con ''%%==%%'' se compara si son equivalentes dos expresiones**.
===== Bibliotecas de terceros =====
Algunas bibliotecas de Python interesantes:
* [[https://www.djangoproject.com/|Django]]: framework para desarrollo web.
* Flask: biblioteca para el desarrollo web.
* [[informatica:programacion:python:modulos:pyqt|PyQt6]]: para crear interfaces gráficas de usuario
* [[https://docs.python.org/3/library/tkinter.html|TkInter]]: para crear interfaces gráficas de usuario ([[https://realpython.com/python-gui-tkinter/|Tutorial]])
* **BeautifulSoup**: biblioteca para procesar elementos en texto estructurado (XML y HTML). Muy utilizada para la práctica del "web scrapping", o extracción de datos de páginas y servicios web.
* **Colorama**: permite imprimir textos en colores en la salida de la terminal o consola, incluyendo el fondo o estilo del texto, en múltiples plataformas
* [[informatica:programacion:python:modulos:pandas|Pandas]]: biblioteca para el análisis y manipulación de datos. Hay quien lo utiliza con cantidades ingentes de información, para procesar y transformar datos.
* NumPy
* Scikit-learn
* MatplotLib
* Seaborn
* SQLAlchemy: proporciona las herramientas necesarias para administrar la conectividad a una base de datos relacional, interactuar con las consultas y los resultados de las bases de datos y la construcción de las declaraciones en SQL.
* Natural Language Toolkit: procesamiento del lenguaje natural
* Requests: Biblioteca para realizar peticiones HTTP desde Python de forma sencilla y obtener las respuestas de las mismas. Python incluye por defecto la biblioteca ''http'', pero Requests es más fácil de usar.
* [[https://python-pillow.org/|Pillow]]: procesar y generar imágenes con Python.
* [[https://geopandas.org/en/stable/|GeoPandas]]: es una biblioteca que complementa a Pandas, ampliando las funciones de esta última para poder procesar datos geoespaciales.
===== Diseño de proyectos =====
Está todo centrado en Programación Orientada a Objetos.
* https://devexperto.com/ley-de-demeter/
* https://en.wikipedia.org/wiki/Law_of_Demeter
* https://es.wikipedia.org/wiki/SOLID