Informe del curso
Registro organizado de los temas desarrollados durante el curso, incluyendo prácticas, conceptos de Python, estructuras de datos, librerías, presentaciones grupales y herramientas aplicadas al área tecnológica.
En esta clase se presentó la forma en que se debía desarrollar el portafolio del curso. También se explicó el ingreso a la plataforma eCampus, la cual sería utilizada durante el semestre para revisar actividades, entregar trabajos y mantener el seguimiento de la materia.
Esta primera orientación fue importante porque permitió conocer la estructura general del curso y la manera en que se organizarían las evidencias de aprendizaje.
Se realizó una prueba diagnóstica sobre conocimientos básicos de programación, con el objetivo de que el profesor pudiera conocer el nivel del grupo. También se introdujeron conceptos importantes sobre Python, un lenguaje interpretado, gratuito y de código abierto.
Se explicó que Python fue creado por Guido Van Rossum y que su nombre está relacionado con el programa Monty Python. Además, se mencionó que este lenguaje se utiliza en áreas como inteligencia artificial, análisis de datos, videojuegos, automatización, ciberseguridad y pruebas de software.
Entre las librerías mencionadas estuvieron NumPy, Pandas, spaCy, TensorFlow, Scapy, SciPy, Pygame, Scrapy, Matplotlib y Pytest. También se hablaron de herramientas como Visual Studio Code, Anaconda, Spyder, Jupyter Notebook, PyCharm y Thonny.
En esta clase se conectó una placa Raspberry y se trabajó con el entorno Thonny. También se reforzó el uso de estructuras condicionales, especialmente if, elif y else.
Se explicó que elif permite evaluar una condición adicional cuando la primera no se cumple. También se practicaron validaciones para transformar la información ingresada por el usuario, por ejemplo, convirtiendo texto a minúscula para evitar errores al comparar respuestas.
# Validación básica de entrada
respuesta = input("Desea continuar? ").lower()
if respuesta == "si":
print("El usuario desea continuar")
elif respuesta == "no":
print("El usuario no desea continuar")
else:
print("Respuesta no válida")
Se explicó el uso de match-case, una estructura disponible desde Python 3.10 que permite establecer casos o escenarios de manera más ordenada. Esta estructura funciona como una alternativa a varios elif, especialmente cuando se desea evaluar distintas opciones.
También se trabajaron métodos como upper() y lower(), utilizados para convertir texto a mayúsculas o minúsculas. Además, se explicó el uso del guion bajo en algunos casos para representar una opción por descarte.
# Ejemplo con match-case
opcion = input("Ingrese una opción: ").lower()
match opcion:
case "a":
print("Seleccionó la opción A")
case "b":
print("Seleccionó la opción B")
case _:
print("Opción no reconocida")
En esta clase también se habló sobre el operador ternario, utilizado para escribir decisiones simples en una sola línea, siempre que no complique la lectura del código.
Se estudiaron las estructuras cíclicas o bucles, principalmente while y for. El ciclo while se utiliza cuando no se conoce exactamente cuántas veces se repetirá una instrucción, mientras que el ciclo for se usa cuando sí se conoce la cantidad de repeticiones.
Se explicó que la sangría es fundamental en Python, porque determina qué instrucciones pertenecen al ciclo. Si una línea queda fuera de la sangría, también queda fuera de la estructura de repetición.
# Ciclo for con range
for i in range(1, 15, 2):
print(i)
También se trabajaron las sentencias break y continue. La primera permite interrumpir un ciclo cuando se cumple una condición, mientras que la segunda permite saltar una iteración y continuar con la siguiente.
En esta clase se introdujeron los datos compuestos, que permiten almacenar varios valores dentro de una misma estructura. Se estudiaron las listas, tuplas, conjuntos, diccionarios y cadenas de caracteres.
Las listas son ordenadas y modificables; las tuplas no pueden modificarse después de ser creadas; los conjuntos no tienen orden ni permiten elementos duplicados; y los diccionarios trabajan con pares de clave y valor.
También se explicó que los strings o cadenas de caracteres pueden comportarse como listas, ya que cada carácter ocupa una posición dentro de la cadena.
# Uso de índices en una cadena cadena = "POTTER" print(cadena[0]) # P print(cadena[5]) # R print(cadena[-1]) # R
Se continuó trabajando con cadenas de caracteres y métodos como startswith(), que permite verificar si una cadena inicia con cierto texto, y endswith(), que permite comprobar si termina con una letra o palabra específica.
También se habló sobre bloques de gestión de errores y sobre el formato de salida con f-strings, que permiten insertar variables dentro de un texto de manera más clara y ordenada.
# Formato de salida con f-string
pelicula = "Jurassic World Rebirth"
boleto = 5.2475
print(f"{pelicula} es el estreno de la semana.")
print(f"Precio del boleto: ${boleto:.2f}")
En esta clase se trabajó el concepto de listas multidimensionales, también conocidas como listas de listas. Estas estructuras permiten organizar información como si fuera una tabla, con filas y columnas.
Se utilizó un ejemplo de postres para comprender cómo se almacenan varios datos dentro de una misma lista: nombre del postre, cantidad disponible y precio por unidad.
# Lista bidimensional de postres
postres = [
["Cheesecake", 12, 3.50],
["Tres Leches", 8, 2.75],
["Flan", 15, 1.50],
["Brownie", 20, 1.25],
["Tiramisú", 6, 4.00]
]
print("Lista de postres:")
for postre in postres:
print(postre[0], "-", postre[1], "unidades a $", postre[2])
Este ejercicio permitió entender cómo acceder a datos específicos mediante índices y cómo recorrer toda la estructura usando for-in.
Se explicó que el ciclo for-in permite recorrer estructuras literables como listas, tuplas y cadenas sin necesidad de utilizar un contador manual. La variable ubicada después de la palabra for captura temporalmente cada elemento de la estructura.
En el caso de una lista bidimensional, cada elemento recorrido puede ser otra lista. Por eso, para acceder a datos específicos se utilizan índices internos, por ejemplo postre[0] para el nombre, postre[1] para la cantidad y postre[2] para el precio.
Se estudió la tupla, una estructura parecida a la lista, pero con la diferencia de que es inmutable. Esto significa que, después de creada, no se puede modificar directamente. Si se intenta agregar un valor, realmente se genera una nueva tupla en otra posición de memoria.
También se explicó el uso de id() para observar el identificador de memoria, len() para conocer la longitud, type() para verificar el tipo de dato, y los métodos index() y count().
# Tupla e inmutabilidad tupla = (1, 2, 3) print(id(tupla)) tupla = tupla + (4,) print(id(tupla))
Además, se practicó el unpacking o desempaquetado, que permite asignar los valores de una tupla a varias variables, siempre que la cantidad de variables coincida con la cantidad de elementos.
# Desempaquetado de tupla
datos = ("Jazmín", "Ciberseguridad", 2)
nombre, carrera, año = datos
print(nombre)
print(carrera)
print(año)
En esta clase se introdujo el uso de NumPy, una librería fundamental para cálculo numérico y análisis de datos. Se explicó que permite trabajar con arreglos homogéneos, es decir, estructuras donde los elementos son del mismo tipo de dato.
Se comparó el uso de estas estructuras con una tabla de Excel, ya que permiten organizar información en filas y columnas. También se mencionó que NumPy permite trabajar con arreglos unidimensionales, bidimensionales e incluso de más dimensiones.
# Ejemplo básico con NumPy
import numpy as np
numeros = np.array([10, 20, 30, 40])
print(numeros)
print("Promedio:", numeros.mean())
print("Suma:", numeros.sum())
En esta práctica se trabajó el uso de funciones lambda, que permiten crear funciones pequeñas y rápidas en una sola línea. Este tipo de función puede utilizarse cuando se necesita realizar una operación simple sin definir una función tradicional completa.
También se relacionó el tema con el manejo de coordenadas y cálculos básicos, reforzando la idea de que una función puede recibir datos, procesarlos y devolver un resultado.
# Ejemplo de función lambda
distancia_simple = lambda x1, x2: abs(x2 - x1)
resultado = distancia_simple(5, 12)
print("La distancia es:", resultado)
Se presentó el tema de Hashlib, una biblioteca estándar de Python que permite generar resúmenes digitales o hashes. Estos se utilizan para verificar la integridad de archivos, proteger información y comprobar si un dato fue modificado.
Se explicaron algoritmos como MD5, SHA-1, SHA-256 y SHA-512. También se aclaró que MD5 y SHA-1 ya no se recomiendan para aplicaciones de seguridad modernas, debido a vulnerabilidades y ataques por colisión.
# Ejemplo básico con Hashlib import hashlib texto = "mensaje de prueba" hash_generado = hashlib.sha256(texto.encode()).hexdigest() print(hash_generado)
Además, se habló sobre el uso de salt, pepper e iteraciones múltiples para mejorar la protección de contraseñas. También se mencionaron algoritmos especializados como bcrypt, scrypt y Argon2.
Durante el curso, los grupos realizaron exposiciones sobre diferentes herramientas y librerías relacionadas con Python. Estas presentaciones permitieron conocer usos prácticos del lenguaje en áreas como ciberseguridad, criptografía, automatización, análisis de información y manipulación de datos.
Scapy
Presentado por Alfonso, Freisinet y Félix. Tema relacionado con manipulación, captura y análisis de paquetes de red.
Cryptography
Presentado por José, Carlos, Cristian y Daniel. Tema enfocado en criptografía y protección de información.
YARA-Python
Presentado por Jazmín, Margarita, Agustín y Alyasir. Tema enfocado en detección de patrones, reglas YARA y análisis de archivos sospechosos.
Requests + BeautifulSoup
Presentado por José, Yosué y Tomás. Tema relacionado con solicitudes web y extracción de información de páginas.
Hashlib
Presentado por Jesús, Alex, Gerald y Rotney. Tema enfocado en hashes, integridad de datos y seguridad de la información.
En esta clase se conversó sobre el parcial y también se abordó el tema de Scapy, una herramienta utilizada para enviar, capturar, analizar y falsificar paquetes de red dentro de entornos controlados.
Entre sus características se mencionó la capacidad de forjar paquetes, realizar sniffing avanzado, decodificar tráfico y relacionar peticiones con respuestas. También se explicó que puede utilizarse en escaneo de red, mapeo de puertos abiertos y traceroute personalizado.
El profesor también presentó el tema de gestión de archivos, explicando ejemplos de creación de archivos nuevos, almacenamiento de información y manejo básico de datos guardados desde un programa.
En esta clase se introdujo el manejo de clases en Python. Se explicó que una clase puede tener atributos y funciones, y que se utiliza como una plantilla para crear objetos.
También se explicó el uso del método __init__, que permite inicializar los datos de un objeto, y el uso de self, que representa al propio objeto dentro de la clase. Además, se mencionó la nomenclatura CamelCase para nombrar clases de manera ordenada.
# Ejemplo básico de clase
class Estudiante:
def __init__(self, nombre, carrera):
self.nombre = nombre
self.carrera = carrera
mi_estudiante = Estudiante("Jazmín", "Ciberseguridad")
print(mi_estudiante.nombre)
print(mi_estudiante.carrera)
Finalmente, se repasó el uso de paquetes y librerías. Se explicó que una librería completa puede importarse con import, mientras que también es posible traer elementos específicos desde un paquete o subpaquete.
# Formas de importar librerías import math from paquete1.subpaquete import matematicas
Comentarios
Publicar un comentario