12 preguntas inéditas: recuerdo (25 %) + aplicación (50 %) + arbitraje (25 %) sobre Estructuras de datos y POO.
Responde a todo y pulsa Corregir: aparecerán tu puntuación y las explicaciones.
2.1 · Recuerdo
1. ¿Qué estructura elegir para asociar un código de cliente con su información?
El dict es el directorio: acceso por clave, .get() sin KeyError, recorrido en .items().
2.1 · Aplicación
2. Nabil escribe «copia = ventas» y luego modifica «copia». ¿Qué ocurre?
= comparte, no copia: .copy() en superficie, deepcopy() para lo anidado.
2.1 · Arbitraje
3. Un colega busca cada cliente recorriendo una lista de 50 000 líneas cada vez. ¿Veredicto de Nabil?
Buscar por identificador = dict indexado; la lista queda para el orden y el recorrido.
2.2 · Recuerdo
4. ¿Por qué preferir los f-strings a la concatenación con +?
f"Total: {total:.2f} €»: variable, cálculo y formato en una línea legible.
2.2 · Aplicación
5. Nabil lee una exportación con acentos rotos y un archivo a veces bloqueado. ¿Qué corrige?
with lo cierra solo incluso en error; encoding utf-8 conserva los acentos; «w» sobrescribe, no lee.
2.2 · Aplicación
6. El resumen de Nabil debe sobrevivir al reinicio y seguir siendo intercambiable. ¿Qué formato?
JSON = listas y dicts persistentes, legibles por otras herramientas; módulo csv para las hojas de cálculo.
2.3 · Recuerdo
7. ¿Qué designa «self» en un método?
self se escribe en la definición, nunca en la llamada: cada objeto conserva su propio estado.
2.3 · Aplicación
8. Nabil crea VentaDescuento(Venta) con una tasa y super().__init__(). ¿Qué ha hecho?
Herencia para es-un, poco profunda; composición (tiene-unas) si no.
2.3 · Arbitraje
9. Un colega propone 6 niveles de herencia y dicts + funciones globales «para ir rápido». ¿Veredicto?
Datos + comportamientos en clase, herencia medida, __str__/__eq__ y @dataclass si conviene.
2.4 · Aplicación
10. Nabil convierte una entrada con float(). ¿Cómo fiabilizarla?
Arriesgado preciso enmarcado, tipo dirigido, tratamiento real — nunca except desnudo.
2.4 · Aplicación
11. Un monto negativo llega en Venta(...). ¿Dónde rechazarlo?
raise señala el invariante violado en la fuente; finally limpia, else continúa si OK.
2.4 · Arbitraje
12. Un colega quiere un «except: pass» general para «no ver más errores». ¿Veredicto de Nabil?
Silenciar entierra los bugs vivos: solo se atrapa lo que se sabe tratar.
¿Y ahora qué?
Puntuación ≥ 80 %: pase al Nivel 3 — módulos, pip/venv y funciones avanzadas, sobre sus bases sólidas en datos y objetos.
Puntuación 60-79 %: repase las secciones falladas (2.1 contenedores/copias, 2.2 f-strings/with/JSON, 2.3 clases/herencia/dunders, 2.4 try dirigidos/raise) y rehaga los desafíos 48h.
Puntuación < 60 %: reconstruya el proyecto de Nabil paso a paso (ventas en lista de dicts, informe en f-strings + JSON, clases Venta, importación fiabilizada), y vuelva a pasar la prueba.
En todos los casos: conserve los reflejos — contenedor adecuado para cada uso, f-strings + with/encoding, objetos ciudadanos, excepts dirigidos sin silencio.