Programación Avanzada Python
Primer Semestre 2025/2026 - NRC: 3703
Diego Morales
September 1, 2025
Universidad San Francisco de Quito
Colecciones
Tuplas (tuple)
Características
• Colecciones ordenadas e inmutables
• Más eficientes en memoria que las listas
• Útiles para datos que no deben cambiar
• Pueden contener elementos de diferentes tipos
2
Operaciones con tuplas
1 # Creación
2 coordenadas = (10, 20)
3 colores = ("rojo", "verde", "azul")
4 mezcla = (1, "dos", 3.0, True)
5
6 # Acceso
7 print(coordenadas[0]) # 10
8 print(colores[-1]) # "azul"
9
10 x, y = coordenadas
11 print(f"X: {x}, Y: {y}") # X: 10, Y: 20
12
13 # Métodos
14 print([Link]("rojo")) # 1
15 print([Link]("verde")) # 1
3
Diccionarios (dict)
Características
• Colecciones de pares clave-valor
• No ordenados (hasta Python 3.6), ordenados (desde Python 3.7+)
• Claves deben ser inmutables e únicas
• Muy eficientes para búsquedas
4
Operaciones con diccionarios
1 # Creación
2 estudiante = {"nombre": "Ana", "edad": 22, "carrera": "CS"}
3 thisdict = dict(name = "John", age = 36, country = "Norway")
4
5 # Acceso
6 print(estudiante["nombre"]) # "Ana"
7 print([Link]("edad")) # 22
8 print([Link]("ciudad", "No especificada")) # "No especificada"
9
10 # Modificación
11 estudiante["edad"] = 22
12 estudiante["ciudad"] = "Madrid"
13
14 # Métodos
15 print([Link]()) # dict_keys(['nombre', 'edad', 'carrera',
'ciudad'])
16 print([Link]()) # dict_values(['Ana', 23, 'CS', 'Madrid'])
17 print([Link]()) # dict_items([('nombre', 'Ana'), ...])
5
Sets (conjuntos)
Características
• Colecciones no ordenadas de elementos únicos
• Muy eficientes para operaciones de pertenencia
• Soportan operaciones matemáticas de conjuntos
• Elementos deben ser inmutables
6
Operaciones con sets
1 # Creación
2 numeros = {1, 2, 3, 4, 5}
3 vocales = set("aeiou")
4
5 # Operaciones básicas
6 [Link](6) # {1, 2, 3, 4, 5, 6}
7 [Link](3) # {1, 2, 4, 5, 6}
8
9 # Operaciones de conjuntos
10 A = {1, 2, 3, 4}
11 B = {3, 4, 5, 6}
12
13 print(A | B) # Unión: {1, 2, 3, 4, 5, 6}
14 print(A & B) # Intersección: {3, 4}
15 print(A - B) # Diferencia: {1, 2}
16 print(A ^ B) # Diferencia simétrica: {1, 2, 5, 6}
7
Funciones
Funciones en Python
Definición y llamada
1 # Definición básica
2 def saludar(nombre):
3 """Función que saluda a una persona"""
4 return f"¡Hola {nombre}!"
5
6 # Llamada
7 mensaje = saludar("Carlos")
8 print(mensaje) # ¡Hola Carlos!
9
10 # Función con múltiples parámetros
11 def potencia(base, exponente):
12 return base ** exponente
13
14 resultado = potencia(2, 3) # 8
8
Parámetros por defecto
1 def mostrar_info(nombre, edad=25, ciudad="Desconocida"):
2 return f"{nombre}, {edad} años, de {ciudad}"
3
4 print(mostrar_info("Ana")) # Ana, 25 años, de Desconocida
5 print(mostrar_info("Luis", 30)) # Luis, 30 años, de Desconocida
6 print(mostrar_info("Marta", 28, "Sevilla")) # Marta, 28 años, de Sevilla
9
*args y **kwargs
Número variable de argumentos
1 # *args para múltiples argumentos posicionales
2 def sumar(*args):
3 return sum(args)
4
5 print(sumar(1, 2, 3)) # 6
6 print(sumar(1, 2, 3, 4, 5)) # 15
7
8 # **kwargs para múltiples argumentos con nombre
9 def mostrar_info(**kwargs):
10 for clave, valor in [Link]():
11 print(f"{clave}: {valor}")
12
13 mostrar_info(nombre="Ana", edad=25, ciudad="Madrid")
14 # nombre: Ana
15 # edad: 25
16 # ciudad: Madrid
10
1 # Combinación de ambos
2 def funcion_completa(a, b, *args, **kwargs):
3 print(f"a: {a}, b: {b}")
4 print(f"args: {args}")
5 print(f"kwargs: {kwargs}")
11
Funciones como Objetos
Funciones como variables
1 def cuadrado(x):
2 return x ** 2
3
4 def cubo(x):
5 return x ** 3
6
7 # Asignar función a variable
8 operacion = cuadrado
9 print(operacion(5)) # 25
10
11 operacion = cubo
12 print(operacion(5)) # 125
13
14 # Funciones en listas
15 operaciones = [cuadrado, cubo]
16 for func in operaciones:
17 print(func(3)) # 9, luego 27
12
Funciones como parámetros
1 def aplicar_funcion(func, valores):
2 return [func(x) for x in valores]
3
4 numeros = [1, 2, 3, 4, 5]
5 print(aplicar_funcion(cuadrado, numeros)) # [1, 4, 9, 16, 25]
6 print(aplicar_funcion(cubo, numeros)) # [1, 8, 27, 64, 125]
13
Funciones Lambda
Funciones anónimas
1 # Sintaxis: lambda argumentos: expresión
2
3 # Función lambda equivalente a cuadrado
4 cuadrado = lambda x: x ** 2
5 print(cuadrado(5)) # 25
6
7 # Uso con map()
8 numeros = [1, 2, 3, 4, 5]
9 cuadrados = list(map(lambda x: x ** 2, numeros))
10 print(cuadrados) # [1, 4, 9, 16, 25]
11
12 # Uso con filter()
13 pares = list(filter(lambda x: x % 2 == 0, numeros))
14 print(pares) # [2, 4]
14
Ejercicios
Ejercicio 1: Análisis de Texto Avanzado
Enunciado
Crea una función que reciba un texto y devuelva un diccionario con:
1. Número total de palabras
2. Número de palabras únicas
3. La palabra más larga
4. Frecuencia de cada letra (ignorando mayúsculas/minúsculas)
5. Las 5 palabras más comunes
Ejemplo
Entrada: ”Python es poderoso. Python es simple. Python es eficaz.”
Salida esperada:
{
'total_palabras': 9, 15
Ejercicio 2: Sistema de Gestión de Estudiantes
Enunciado
Crea un sistema de gestión de estudiantes usando:
• Tuplas para representar estudiantes (nombre, edad, carrera)
• Sets para almacenar carreras únicas
• Diccionarios para calificaciones por estudiante
• Funciones para operaciones
Implementa las siguientes funciones:
1. agregar_estudiante(nombre, edad, carrera)
2. asignar_calificacion(nombre, materia, calificacion)
3. obtener_promedio(nombre)
4. estudiantes_por_carrera(carrera)
5. top_estudiantes(n=3)
16