¡Llegamos al final de nuestra megaguía en larebelion.com! Ya hemos superado las bases, las estructuras, la POO y la algoritmia. ¿Qué nos queda? Interactuar con el mundo real.
En este último bloque de 10 ejercicios (del 41 al 50) nos enfrentamos a problemas de exámenes de universidades españolas que exigen leer ficheros TXT, CSV y JSON, validar datos con Expresiones Regulares (RegEx) y utilizar las librerías estrella: Pandas y NumPy. ¡Vamos a por el 10!
41. Ficheros TXT: Contar Líneas y Palabras (UAH)
Enunciado: Escribe una función que abra un archivo de texto en modo lectura y devuelva una tupla con el número total de líneas y el número total de palabras.
try:
with open(ruta, 'r', encoding='utf-8') as f:
lineas = f.readlines()
num_lineas = len(lineas)
num_palabras = sum(len(linea.split()) for linea in lineas)
return (num_lineas, num_palabras)
except FileNotFoundError:
return "Archivo no encontrado"
42. Ficheros: Escribir sin Sobrescribir (UAL)
Enunciado: Crea una función que reciba una ruta y una cadena de texto, y añada ese texto al final del archivo existente sin borrar su contenido anterior.
# Usamos el modo 'a' (append) en lugar de 'w' (write)
with open(ruta, 'a', encoding='utf-8') as f:
f.write(mensaje + "\n")
43. Manejo de JSON: Guardar Diccionarios (URV)
Enunciado: Dado un diccionario de Python con datos de estudiantes, expórtalo a un archivo con formato JSON, asegurando que la indentación sea de 4 espacios.
def guardar_json(datos, ruta_salida):
with open(ruta_salida, 'w', encoding='utf-8') as f:
json.dump(datos, f, indent=4, ensure_ascii=False)
44. CSV Nativo: Leer Columnas (UJI)
Enunciado: Usando solo la librería estándar csv, lee un archivo y devuelve una lista con todos los valores de la segunda columna.
def extraer_columna(ruta_csv):
columna = []
with open(ruta_csv, 'r', encoding='utf-8') as f:
lector = csv.reader(f)
for fila in lector:
if len(fila) > 1:
columna.append(fila[1])
return columna
45. RegEx: Validador de DNI Español (UCA)
Enunciado: Escribe una función que utilice expresiones regulares para comprobar si un string tiene el formato válido de un DNI español (8 números seguidos de una letra mayúscula).
def es_dni_valido(dni):
# Patrón: Exactamente 8 dígitos (\d{8}) y 1 letra mayúscula ([A-Z])
patron = r"^\d{8}[A-Z]$"
return bool(re.match(patron, dni))
46. RegEx: Extractor de Correos Electrónicos (UNIOVI)
Enunciado: Dado un texto largo, extrae todas las direcciones de correo electrónico que aparezcan en él usando re.findall.
def extraer_emails(texto):
patron = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
return re.findall(patron, texto)
47. NumPy: Arrays 1D a 2D (UPNA)
Enunciado: Utiliza NumPy para crear un array de 12 elementos (del 1 al 12) y luego cambia su forma (reshape) para convertirlo en una matriz de 3x4.
def crear_matriz_numpy():
# np.arange(1, 13) crea array del 1 al 12
array_1d = np.arange(1, 13)
matriz_2d = array_1d.reshape((3, 4))
return matriz_2d
48. Pandas: Leer y Calcular Media (UPO)
Enunciado: Escribe un código usando Pandas que lea un archivo "alumnos.csv" y calcule la media aritmética de la columna llamada 'Nota_Final'.
def calcular_media_csv(ruta):
df = pd.read_csv(ruta)
if 'Nota_Final' in df.columns:
return df['Nota_Final'].mean()
return None
49. Pandas: Filtrado de DataFrames (UCLM)
Enunciado: Dado un DataFrame de Pandas con información de empleados, filtra y devuelve solo aquellos que pertenezcan al departamento de 'IT' y cobren más de 2000€.
def filtrar_empleados(df):
# Uso de condiciones booleanas múltiples con &
filtro = df[(df['Departamento'] == 'IT') & (df['Salario'] > 2000)]
return filtro
50. El Ejercicio Final: Manejo de Excepciones Múltiples (UVA)
Enunciado: Crea una función que intente convertir un input de texto a número entero y luego dividir 100 entre ese número. Atrapa específicamente los errores ValueError y ZeroDivisionError.
try:
numero = int(entrada)
resultado = 100 / numero
return resultado
except ValueError:
return "Error: Debes introducir un número válido."
except ZeroDivisionError:
return "Error: No se puede dividir entre cero."
No hay comentarios:
Publicar un comentario