Indicación metodológica de lectura fundamental para el estudiante
Se acabó la teoría. Se acabaron los cuestionarios sobre su lector de pantalla, las explicaciones históricas y los ejercicios mentales de calentamiento. Usted ha llegado a la Semana 14. Todo el conocimiento que necesita para crear software real, útil y funcional ya reside en su mente, en sus notas y en la disciplina que ha forjado durante estas semanas.
Este documento contiene únicamente las especificaciones de su Proyecto Final. Este es un verdadero reto, diseñado solo para aquellos que tienen la madurez, la tenacidad y la valentía de enfrentar la pantalla en blanco y construir sistemas desde cero. Lea las instrucciones con absoluta atención.
Reglas de Aprobación del Proyecto Final
A continuación, se le presentarán seis proyectos de software. La dificultad de estos proyectos aumenta progresivamente: el proyecto uno es el más accesible, y el proyecto seis es un reto absoluto de ingeniería.
Regla 1: Para aprobar este bloque y tener derecho a la Evaluación Final, usted está OBLIGADO a completar y entregar exactamente tres proyectos de esta lista. Usted elige cuáles.
Regla 2: Si usted desea demostrar un nivel superior, puede completar un cuarto proyecto para subir su calificación y obtener honores.
Regla 3: Si completa cinco proyectos, su calificación alcanzará la excelencia absoluta.
Regla 4: El estudiante es completamente libre de elegir hacer los seis proyectos si su deseo de aprender y superarse no tiene límites. Si usted logra resolver el proyecto número seis, habrá demostrado que tiene la lógica implacable de un verdadero programador.
Regla 5: Cada proyecto debe ser un archivo de Python independiente, por ejemplo: proyecto_uno.py. Todos deben funcionar de principio a fin sin colapsar.
A continuación, los seis retos. Elija sus batallas.
---
Proyecto 1: La Calculadora de Gastos Mensuales (Nivel Básico)
Contexto: Las personas necesitan saber en qué se les va el dinero. Su programa será una herramienta de contabilidad personal.
El Reto:
Construya un programa que utilice un bucle infinito, la estructura while, para preguntarle al usuario dos cosas: el nombre de un gasto, por ejemplo Luz, Agua, Internet, y el monto de ese gasto. El programa debe seguir pidiendo datos hasta que el usuario escriba la palabra fin.
Resultado esperado:
Cuando el usuario escriba fin, el programa debe sumar todos los montos ingresados y mostrar en la consola el total de gastos del mes. Además, debe crear un archivo llamado gastos_mensuales.txt y guardar allí la lista detallada de cada gasto y el gran total al final.
Ayuda técnica:
Necesitará una variable acumuladora iniciada en cero para sumar los montos. Recuerde usar try-except al pedir el monto, por si el usuario escribe texto en lugar de números y evitar que el programa explote. Guarde los nombres y montos en una lista temporal antes de escribirlos en el disco duro.
---
Proyecto 2: La Agenda de Contactos Persistente (Nivel Intermedio)
Contexto: Un programa que pierde la información al cerrarse no es útil. Crearemos una agenda que recuerde a sus contactos en el disco duro.
El Reto:
Cree un programa que muestre un menú con tres opciones: 1. Agregar contacto, 2. Ver contactos, 3. Salir.
Si el usuario elige 1, se le pedirá nombre y teléfono, y estos datos se guardarán inmediatamente en un archivo de texto llamado agenda.txt.
Si el usuario elige 2, el programa debe abrir el archivo agenda.txt en modo lectura, leer todo su contenido y mostrarlo en la consola.
Resultado esperado:
Un sistema que no se cierre hasta que el usuario elija la opción 3. Si el usuario cierra el programa y lo vuelve a abrir al día siguiente, al elegir la opción 2, los contactos guardados el día anterior deben seguir allí intactos.
Ayuda técnica:
Use el modo "a", o append, en la función open para agregar contactos sin borrar los anteriores. Use el modo "r", o read, para la opción 2. Controle el flujo del menú con un ciclo while y estructuras if-elif.
---
Proyecto 3: El Analizador de Documentos (Nivel Intermedio-Alto)
Contexto: La automatización de oficinas requiere procesar textos largos en fracciones de segundo.
El Reto:
Primero, cree manualmente un archivo de texto llamado borrador.txt y escriba en él tres párrafos largos sobre cualquier tema.
Luego, cree su programa en Python. El programa debe abrir borrador.txt, leer todo el texto y hacer tres cosas:
1. Contar cuántas palabras hay en total en el documento.
2. Convertir todo el documento a letras mayúsculas.
3. Guardar el documento convertido a mayúsculas en un archivo nuevo llamado documento_final.txt.
Resultado esperado:
La consola debe imprimir un mensaje indicando cuántas palabras tiene el documento. En su carpeta, debe aparecer el nuevo archivo documento_final.txt con todo el texto impecablemente transformado a mayúsculas.
Ayuda técnica:
Para contar palabras, recuerde el método .split(" ") que convierte una cadena de texto en una lista separada por espacios; luego use la función len() para saber cuántos elementos tiene esa lista. Use el método .upper() para las mayúsculas.
---
Proyecto 4: El Simulador de Cajero Automático (Nivel Alto)
Contexto: Los sistemas bancarios requieren seguridad, funciones modulares y un manejo estrictamente defensivo de los errores.
El Reto:
Diseñe un programa que simule un cajero. El usuario comienza con un saldo de 50000.
El programa debe tener funciones definidas con la palabra def para depositar y retirar.
El programa principal debe tener un bucle que muestre estas opciones. Si el usuario retira, el saldo disminuye; si deposita, aumenta.
Reglas estrictas:
1. Si el usuario intenta retirar más dinero del que tiene, el programa debe denegar la transacción y mostrar un mensaje de fondos insuficientes.
2. Si el usuario escribe letras en lugar de la cantidad a retirar o depositar, el programa debe capturar el error con try-except ValueError y no colapsar.
Resultado esperado:
Un cajero robusto del cual es imposible sacar más dinero del que existe, imposible de romper escribiendo letras, y que actualice el saldo perfectamente en cada transacción hasta que el usuario decida salir.
Ayuda técnica:
Para no tener problemas con variables que se borran, pásele el saldo actual a sus funciones dentro de los paréntesis como un parámetro y obligue a la función a usar return para devolver el nuevo saldo calculado al programa principal.
---
Proyecto 5: Sistema de Inventario de Almacén (Nivel Muy Alto)
Contexto: Usted ha sido contratado para administrar una bodega. Aquí pondrá a prueba su dominio absoluto de los Diccionarios y la persistencia de datos.
El Reto:
Cree un inventario utilizando un Diccionario. Las claves serán los nombres de los productos y los valores serán las cantidades disponibles. Por ejemplo: inventario = {"cables": 15, "teclados": 5}.
El programa debe tener un menú completo:
1. Agregar producto nuevo. Pide nombre y cantidad.
2. Actualizar cantidad. Busca un producto que ya existe y reemplaza su stock.
3. Eliminar producto. Borra el producto del diccionario.
4. Guardar y Salir. Escribe el diccionario completo en un archivo inventario_bodega.txt y cierra el sistema.
Resultado esperado:
Un programa donde el usuario manipule claves y valores en tiempo real. Si intenta actualizar o eliminar un producto que no existe, el programa debe capturar el KeyError y decirle Producto no encontrado, permitiéndole continuar. Al finalizar, el estado de la bodega debe quedar impreso en el disco duro.
Ayuda técnica:
Recuerde que para crear o modificar un valor existente solo debe hacer: inventario["clave"] = nueva_cantidad. El manejo de excepciones es vital aquí para evitar colapsos. Para escribir el diccionario en el archivo, recuerde convertirlo a texto usando la función str().
---
Proyecto 6: El Encriptador de Seguridad (Reto Absoluto)
Contexto: La ciberseguridad se basa en alterar mensajes para que nadie más pueda leerlos. Usted va a programar un motor de encriptación clásico conocido como Cifrado César. Este reto exige lógica matemática, ciclos y un control quirúrgico de los índices de las listas y cadenas.
El Reto:
Cree un programa que encripte mensajes. Usted debe definir una variable con el alfabeto exacto: alfabeto = "abcdefghijklmnopqrstuvwxyz".
El programa le pedirá al usuario un mensaje y un número de llave, por ejemplo el número 2.
El programa debe recorrer cada letra del mensaje del usuario usando un ciclo for. Por cada letra, debe buscar en qué posición o índice está dentro del alfabeto, sumarle el número de la llave, y encontrar la nueva letra en esa nueva posición.
Por ejemplo: Si la letra es a y la llave es 2, la letra a está en la posición 0. Cero más dos es igual a dos. La letra en el índice 2 del alfabeto es c.
El programa construirá un mensaje nuevo, totalmente ilegible, y lo guardará en mensaje_secreto.txt.
Resultado esperado:
Si el usuario escribe abc con llave 1, el programa genera bcd. El sistema debe ser capaz de procesar textos enteros.
Ayuda técnica:
Este es el reto máximo. Le daré la herramienta final que necesita: para saber en qué número de índice está una letra dentro de su variable alfabeto, use el comando .index(). Por ejemplo: posicion = alfabeto.index("h").
El obstáculo real a resolver: ¿Qué pasa si la letra es z, que está en la posición 25, y la llave es 2? Veinticinco más dos es veintisiete. El índice 27 no existe en el alfabeto y el programa explotará con un IndexError. Usted deberá usar su lógica matemática o condicionales if para hacer que, si la nueva posición pasa de 25, vuelva a empezar desde el 0.
---
Información Institucional sobre la Evaluación
Usted tiene en sus manos los planos. Elija inteligentemente sus proyectos obligatorios según la confianza que tenga en sus habilidades y el tiempo del que disponga. Si decide ir por los honores, la excelencia o el reto absoluto, organice su mente.
Escriba su código limpio. Comente las líneas difíciles. Utilice el comando cls en la consola constantemente para no abrumarse con la salida de datos. Escuche con detenimiento lo que su lector de pantalla le dicta en los errores. No hay respuestas correctas únicas en la programación; si su código resuelve el problema planteado siguiendo las reglas, el código es válido y es suyo.
Guarde sus archivos en la carpeta correspondiente. Cuando los termine, estará verdaderamente listo para la Semana 15: La Evaluación Final. Buena suerte.
Profesor: Diego R. Solano C.