Páginas

sábado, 13 de diciembre de 2025

10 Ejercicios Clásicos de Examen Universidad en Python (Resueltos y Explicados)

Si estás estudiando ingeniería, informática o ciencia de datos, es muy probable que te enfrentes a Python en tu primer año. Y seamos sinceros: la teoría está bien, pero en el examen te van a pedir código. 

Para ayudarte a practicar, he recopilado 10 enunciados típicos que aparecen una y otra vez en los exámenes universitarios. He incluido la solución en código y una breve explicación de cómo funciona.

¡Abre tu editor de código y vamos a ello!


1. Comprobar si un número es Primo

El Enunciado: Escribe una función que reciba un número entero positivo y determine si es primo o no.

La Solución:

def es_primo(numero):
    if numero < 2:
        return False
    # Iteramos desde 2 hasta la raíz cuadrada del número + 1
    for i in range(2, int(numero**0.5) + 1):
        if numero % i == 0:
            return False
    return True

# Prueba
n = 29
if es_primo(n):
    print(f"{n} es primo")
else:
    print(f"{n} no es primo")
Nota: Para optimizar, solo necesitamos comprobar hasta la raíz cuadrada del número. Si no hemos encontrado divisores hasta ahí, no los habrá después.

2. La Sucesión de Fibonacci

El Enunciado: Generar los primeros n números de la serie de Fibonacci, donde cada número es la suma de los dos anteriores (empezando por 0 y 1).

def fibonacci(n):
    secuencia = [0, 1]
    while len(secuencia) < n:
        # Sumamos los dos últimos elementos
        siguiente = secuencia[-1] + secuencia[-2]
        secuencia.append(siguiente)
    return secuencia[:n]

print(fibonacci(10))
# Salida: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

3. Palíndromos (Detector de capicúas)

El Enunciado: Crear una función que detecte si una palabra o frase es un palíndromo (se lee igual de izquierda a derecha que de derecha a izquierda), ignorando espacios.

def es_palindromo(texto):
    # Eliminamos espacios y convertimos a minúsculas
    texto = texto.replace(" ", "").lower()
    # Comparamos el texto con su reverso
    return texto == texto[::-1]

print(es_palindromo("Anita lava la tina")) # True

4. Factorial Recursivo

El Enunciado: Calcular el factorial de un número n (n!) utilizando recursividad.

def factorial(n):
    if n == 0 or n == 1:
        return 1
    else:
        return n * factorial(n - 1)

print(factorial(5)) 
# Salida: 120 (5*4*3*2*1)

5. Contar frecuencia de palabras

El Enunciado: Dado un texto, devolver un diccionario donde las claves sean las palabras y los valores sean cuántas veces aparecen.

def contar_palabras(texto):
    palabras = texto.lower().split()
    frecuencia = {}
    
    for palabra in palabras:
        if palabra in frecuencia:
            frecuencia[palabra] += 1
        else:
            frecuencia[palabra] = 1
    return frecuencia

texto_prueba = "Hola mundo hola python mundo"
print(contar_palabras(texto_prueba))
# Salida: {'hola': 2, 'mundo': 2, 'python': 1}

6. Ordenamiento Burbuja (Bubble Sort)

El Enunciado: Ordenar una lista de números de menor a mayor sin usar la función sort(), implementando el algoritmo de burbuja.

def bubble_sort(lista):
    n = len(lista)
    for i in range(n):
        for j in range(0, n - i - 1):
            # Intercambiar si el elemento encontrado es mayor que el siguiente
            if lista[j] > lista[j + 1]:
                lista[j], lista[j + 1] = lista[j + 1], lista[j]
    return lista

numeros = [64, 34, 25, 12, 22, 11, 90]
print(bubble_sort(numeros))

7. Invertir una cadena manualmente

El Enunciado: Invertir un string sin usar slicing ([::-1]), utilizando un bucle.

def invertir_cadena(cadena):
    invertida = ""
    for caracter in cadena:
        invertida = caracter + invertida
    return invertida

print(invertir_cadena("Python")) # Salida: nohtyP

8. Encontrar el número mayor en una lista

El Enunciado: Encontrar el valor máximo de una lista de números sin usar la función max().

def encontrar_maximo(lista):
    maximo = lista[0]
    for numero in lista:
        if numero > maximo:
            maximo = numero
    return maximo

print(encontrar_maximo([10, 50, 2, 99, 23])) # Salida: 99

9. Transpuesta de una Matriz

El Enunciado: Dada una matriz (lista de listas), devolver su transpuesta (cambiar filas por columnas).

# Método clásico con bucles
def transpuesta_clasica(matriz):
    filas = len(matriz)
    columnas = len(matriz[0])
    nueva_matriz = []
    
    for j in range(columnas):
        nueva_fila = []
        for i in range(filas):
            nueva_fila.append(matriz[i][j])
        nueva_matriz.append(nueva_fila)
    return nueva_matriz

m = [[1, 2], [3, 4], [5, 6]]
print(transpuesta_clasica(m))
# Salida: [[1, 3, 5], [2, 4, 6]]

10. Clase básica: Estudiante

El Enunciado: Crear una clase Estudiante que tenga nombre y una lista de notas. Incluir un método para calcular su promedio.

class Estudiante:
    def __init__(self, nombre, notas):
        self.nombre = nombre
        self.notas = notas

    def promedio(self):
        if not self.notas:
            return 0
        return sum(self.notas) / len(self.notas)

alumno = Estudiante("Carlos", [8, 9, 7, 10])
print(f"El promedio de {alumno.nombre} es {alumno.promedio()}")

Conclusión

Dominar estos ejercicios te dará una base sólida para cualquier examen de introducción a la programación. Lo importante no es memorizar el código, sino entender la lógica que hay detrás de cada solución.

¿Te ha salido alguno diferente? ¿Tienes dudas con algún paso? ¡Déjame un comentario abajo y lo revisamos juntos!

No hay comentarios:

Publicar un comentario