sábado, 7 de marzo de 2026

50 Ejercicios de Python Resueltos: Nivel Universidad Española (Grado Ingeniería)

¡Bienvenidos a larebelion.com! Si estás estudiando Ingeniería Informática o cualquier grado técnico en España, sabrás que Python es el "caballo de batalla" en las asignaturas de Fundamentos de Programación. Para ayudarte a superar tus exámenes y, sobre todo, a aprender a programar de verdad, hemos recopilado esta megaguía con 50 ejercicios reales extraídos de exámenes y prácticas de las mejores universidades del país.

No te limites a copiar y pegar. Intenta resolver el enunciado por ti mismo y luego consulta la solución estilizada como en Sublime Text (Monokai) para entender el enfoque correcto. ¡Que comience la rebelión del código!




Parte 1: Fundamentos y Tipos de Datos Simplificados

Esta sección cubre lo básico: bucles, condicionales y operaciones elementales con listas y cadenas. Esenciales para primero de carrera.

1. Cuadrados de los Números Pares en una Lista

  • Universidad: Universidad Politécnica de Madrid (UPM)
  • Asignatura: Grado en Ingeniería Informática - Fundamentos de Programación

Enunciado: Escribir una función que reciba una lista de números enteros y devuelva una nueva lista que contenga los cuadrados de aquellos números de la lista original que sean pares.

def cuadrados_pares(lista):
    # Usamos una "list comprehension" para eficiencia
    return [x**2 for x in lista if x % 2 == 0]

# Test de prueba
mi_lista = [1, 2, 3, 4, 5, 6]
print("Lista original:", mi_lista)
print("Resultado:", cuadrados_pares(mi_lista)) # Output: [4, 16, 36]

2. Detector de Palíndromos (Ignorando Espacios y Mayúsculas)

  • Universidad: Universidad de Granada (UGR)
  • Asignatura: Departamento de Ciencias de la Computación e IA

Enunciado: Crear un programa que determine si una cadena de texto es un palíndromo (se lee igual de izquierda a derecha que de derecha a izquierda). El algoritmo debe ignorar los espacios en blanco y no distinguir entre mayúsculas y minúsculas.

def es_palindromo(cadena):
    # Normalizar: minúsculas y quitar espacios
    s = cadena.lower().replace(" ", "")
    # Comparar la cadena con su inversa
    return s == s[::-1]

# Test de prueba
print(es_palindromo("Anita lava la tina")) # True
print(es_palindromo("Python no lo es"))    # False

3. Contador de Palabras en un Texto

  • Universidad: Universidad de Valencia (UV)
  • Asignatura: Escuela Técnica Superior de Ingeniería (ETSE)

Enunciado: Desarrollar una función que reciba una cadena de texto larga y devuelva un diccionario donde las claves sean las palabras únicas encontradas y los valores sean la frecuencia de aparición de cada palabra.

def contar_palabras(texto):
    palabras = texto.lower().split()
    frecuencias = {}
    for palabra in palabras:
        # Eliminar puntuación básica si es necesario
        palabra = palabra.strip(".,!?")
        if palabra in frecuencias:
            frecuencias[palabra] += 1
        else:
            frecuencias[palabra] = 1
    return frecuencias

# Test de prueba
texto_ejemplo = "Hola mundo. Hola Python, el mundo es grande."
print(contar_palabras(texto_ejemplo))
# Output: {'hola': 2, 'mundo': 2, 'python': 1, 'el': 1, 'es': 1, 'grande': 1}

4. Cálculo del Factorial (Recursivo)

  • Universidad: Universidad de Sevilla (US)
  • Asignatura: Facultad de Informática y Estadística

Enunciado: Implementar una función recursiva para calcular el factorial de un número entero no negativo. Asegurarse de manejar los casos base e incluir una comprobación para números negativos.

def factorial(n):
    if n < 0:
        return "Error: No definido para negativos"
    # Caso base
    if n == 0 or n == 1:
        return 1
    # Caso recursivo
    return n * factorial(n - 1)

# Test de prueba
print("Factorial de 5:", factorial(5)) # 120

5. Búsqueda Binaria (Algoritmo Eficiente)

  • Universidad: Universidad Carlos III de Madrid (UC3M)
  • Asignatura: Algoritmos y Estructuras de Datos

Enunciado: Implementar el algoritmo de búsqueda binaria para encontrar un elemento en una lista ordenada. La función debe devolver el índice del elemento si se encuentra, o -1 si no está presente.

def busqueda_binaria(lista, x):
    izq, der = 0, len(lista) - 1
    while izq <= der:
        mid = (izq + der) // 2
        if lista[mid] == x:
            return mid
        elif lista[mid] < x:
            izq = mid + 1
        else:
            der = mid - 1
    return -1

# Test de prueba
lista_ordenada = [2, 5, 8, 12, 16, 23, 38]
print("Índice de 12:", busqueda_binaria(lista_ordenada, 12)) # 3

...[Continuará en el próximo bloque...]

No hay comentarios:

Publicar un comentario