COMPARTE ESTE ARTÍCULO

Duración sugerida: 55–75 minutos · Lenguaje: Python 3 · Nivel: 1.º de grado/FP/autodidactas

Este simulacro está inspirado en una prueba real de laboratorio de Fundamentos de Programación (UAH, junio 2022), pero no es una copia ni reproduce su contenido; se trata de un diseño original para practicar con enunciados de estilo similar.


Instrucciones

  1. Puedes usar tu entorno Python local o un cuaderno (Jupyter/Colab). No se permite buscar soluciones completas en Internet; sí consultar documentación oficial del lenguaje.
  2. Estructura tu código en funciones con docstrings y tipos (type hints) cuando sea razonable.
  3. Indica precondiciones si las hubiera (por ejemplo, tipos de datos esperados, listas no vacías, etc.).
  4. Proporciona pruebas mínimas (“probadores”) debajo de cada función con print(...) o assert.
  5. Puntuación total: 10 puntos. Se valora corrección, diseño, legibilidad y casos borde.

Dataset común

Usa en los ejercicios de la Parte I la siguiente lista de diccionarios que simula un catálogo de una plataforma de streaming ficticia:

series = [
    {"titulo": "Círculo de Hielo", "reparto": ["Alicia", "Pedro", "Nora", "Luis"],
     "genero": "drama", "temporadas": 5, "visualizaciones": 8200},

    {"titulo": "Vector 7", "reparto": ["Nora", "Miguel"],
     "genero": "ciencia ficción", "temporadas": 3, "visualizaciones": 15000},

    {"titulo": "Café con Bits", "reparto": ["Pedro", "Lucía", "Ana"],
     "genero": "comedia", "temporadas": 6, "visualizaciones": 9100},

    {"titulo": "Sombras del Kernel", "reparto": ["Germán", "Alicia"],
     "genero": "suspense", "temporadas": 4, "visualizaciones": 13000},

    {"titulo": "Redox 2030", "reparto": ["Ana", "Luis"],
     "genero": "ciencia ficción", "temporadas": 7, "visualizaciones": 12000}
]

Puedes ampliar o modificar este dataset si lo justificas en tu solución (por ejemplo, para probar empates o listas vacías). Documenta cualquier cambio.


PARTE I — Laboratorio con listas y diccionarios (7 puntos)

1) Serie con más temporadas de un género (2,5 pt)

Enunciado. Implementa una función mas_temporadas_de_genero(genero: str, series: list) -> tuple[str, int] que devuelva una tupla (titulo, temporadas) con la serie que tenga más temporadas dentro del genero indicado.

  • Empates: si hay varias con el mismo máximo, puedes devolver cualquiera o una lista de títulos; pero debes documentarlo en el docstring y mantener ese comportamiento en las pruebas.
  • Precondiciones: documenta qué ocurre si el género no existe en el catálogo (por ejemplo, devolver None, lanzar ValueError, etc.).

Pruebas mínimas sugeridas

print(mas_temporadas_de_genero("ciencia ficción", series))  # Esperado: ("Redox 2030", 7)

2) Visualizaciones de la serie menos vista (recursivo) (2 pt)

Enunciado. Implementa una función recursiva min_visualizaciones(series: list) -> int que retorne el número de visualizaciones de la serie menos vista. No uses bucles ni funciones agregadas de alto nivel (permitido min sólo si no recorres la lista con él; idealmente compara tú mismo).

  • Casos borde: catálogo vacío ⇒ define y documenta el retorno (por ejemplo, 0 o None).

Pruebas mínimas sugeridas

print(min_visualizaciones(series))  # Con el dataset original, esperado: 8200

3) Filmografía de un intérprete ordenada por impacto (2,5 pt)

Enunciado. Implementa trabajos_de(actor: str, series: list) -> list[tuple[str, int]] que devuelva una lista de tuplas (titulo, visualizaciones) para todas las series donde aparezca actor, ordenada de mayor a menor por visualizaciones.

  • No modifiques la lista original.
  • En caso de no encontrar al actor, devuelve [] (y documenta el comportamiento).

Pruebas mínimas sugeridas

print(trabajos_de("Ana", series))  # Ej.: [("Vector 7", 15000), ("Redox 2030", 12000), ("Café con Bits", 9100)]

PARTE II — Máximo local en secuencias (3 puntos)

4) Detección de máximo local (1 pt)

Enunciado. Implementa es_maximo_local(a: float, b: float, c: float) -> bool que devuelva True si b es estrictamente mayor que a y que c.

  • Considera el caso de valores iguales (no debe contar como máximo local si b == c o b == a).

Pruebas mínimas sugeridas

print(es_maximo_local(4, 7, 5))   # True
print(es_maximo_local(4, 5, 5))   # False

5) Posición del primer máximo local (iterativo o recursivo) (2 pt)

Enunciado. Dada una lista de enteros, implementa una función que devuelva la posición (índice) del primer máximo local. Si no existe, devuelve None.

  • Opción A (iterativa): posicion_primer_maximo_local(lista: list[int]) -> int | None
  • Opción B (recursiva): posicion_primer_maximo_local_rec(lista: list[int]) -> int | None

Pruebas mínimas sugeridas

print(posicion_primer_maximo_local([3,5,5,4,7,5,6,8]))  # Ejemplo de prueba

Criterios de evaluación

  • Corrección (6 pt): resultados esperados, manejo de empates y casos borde, no mutación indebida de datos.
  • Diseño (2 pt): modularidad, docstrings, type hints, nombres claros y consistentes.
  • Pruebas (1 pt): probadores que demuestren el comportamiento normal y casos borde.
  • Estilo (1 pt): legibilidad, comentarios justificados, uso razonable de recursión.

Pérdida de puntos por no documentar decisiones (p. ej., qué devolver cuando no hay coincidencias) o por no justificar el uso de recursión/iteración donde se pide.


Plantilla mínima (opcional)

Copia y completa esta plantilla en tu editor:


Solucionario (oculto)

Consejo: intenta resolver todo sin mirar. Abre cada bloque solo para contrastar.



¿QUÉ TE HA PARECIDO EL ARTÍCULO? Danos tu opinión al final de la página.
Deja tu comentario y ayúdanos a crecer.


¡SÍGUENOS EN TUS REDES FAVORITAS!
AYUDANOS A CRECER Y QUE LLEGUEMOS A TODAS LAS PERSONAS QUE NOS NECESITANA. SÍGUENOS EN TUS REDES.
Entra AQUÍ y elíge donde seguirnos. 

 

 


NUESTRAS ÚLTIMAS PUBLICACIONES

INSTAGRAM

TIKTOK


 …Y PRONTO MUCHAS MÁS

AYUDANOS A CRECER Y A LLEGAR A TODAS LAS PERSONAS QUE NOS NECESITAN.


NUESTRAS ÚLTIMAS PUBLICACIONES


Contenido restringido

Acceso de usuarios existentes
   
Registro de un nuevo usuario
*Campo necesario

Categories:

Tags:

Comments are closed

Estado de acceso
ESTADO DE ACCESO
TRADUCTORES
COMPARTENOS
Insert math as
Block
Inline
Additional settings
Formula color
Text color
#333333
Type math using LaTeX
Preview
\({}\)
Nothing to preview
Insert
error: CONTENIDO PROTEGIDO