Objetivo
Evolucionar el programa de cajero automático desarrollado anteriormente, incorporando el uso de listas y diccionarios como estructuras de datos. La información de los usuarios ya no se ingresa en tiempo de ejecución: en cambio, el programa parte con una lista de usuarios precargada en el código, donde cada usuario es un diccionario con sus datos. El sistema debe autenticar al usuario que quiera operar el cajero y luego ofrecer el mismo menú de acciones bancarias de la versión anterior.
¿Qué cambia respecto a la versión anterior?
| Aspecto | Versión anterior | Esta versión |
|---|---|---|
| Datos de usuarios | Ingresados por consola al inicio | Precargados en el código como lista |
| Estructura de datos | Variables simples separadas | Lista de diccionarios |
| Número de cuentas | Una sola cuenta | Múltiples cuentas en la lista |
| Inicio del programa | Paso 1: registrar datos → Paso 2: cajero | Directamente: autenticación → menú |
| Menú de operaciones | Idéntico | Idéntico (sin cambios) |
Estructura de Datos — Lista de Usuarios
El programa debe definir al inicio una lista llamada usuarios que contenga
al menos 3 usuarios precargados. Cada usuario es un diccionario con los
siguientes campos como mínimo:
usuarios = [
{
"rut": "12345678-9",
"nombre": "Ana García",
"clave": "1234",
"montoCuenta": 500000
},
{
"rut": "98765432-1",
"nombre": "Carlos López",
"clave": "5678",
"montoCuenta": 1200000
},
{
"rut": "11111111-1",
"nombre": "María Soto",
"clave": "9999",
"montoCuenta": 75000
}
]
Flujo General del Programa
"rut" y "clave" coincidan con los ingresados.
- Si encuentra al usuario: accede al menú operando sobre ese diccionario.
- Si no lo encuentra: informa que los datos son inválidos y ofrece reintentar o salir.
Operaciones del Menú
Las operaciones son las mismas de la versión anterior. Se destacan los ajustes necesarios al trabajar con diccionarios.
usuario["montoCuenta"] del usuario autenticado.
Debe mostrarse también el nombre del titular: usuario["nombre"].
- Que el monto sea mayor que 0.
- Que exista saldo suficiente en
usuario["montoCuenta"].
usuario["montoCuenta"].
- La clave actual debe coincidir con
usuario["clave"]. - La nueva clave no puede quedar vacía.
- La nueva clave debe ser distinta de la anterior.
usuario["clave"] en el diccionario.
- El RUT de destino no puede estar vacío.
- El monto debe ser mayor que 0.
- Debe existir saldo suficiente en
usuario["montoCuenta"]. - Nueva validación: el RUT de destino no puede ser el propio RUT del usuario autenticado.
"montoCuenta" también.
Uso Correcto de Listas y Diccionarios
- Recorrer la lista con
forowhilepara buscar al usuario. - Acceder a los datos con
diccionario["clave"]. - Modificar valores del diccionario directamente:
usuario["montoCuenta"] -= monto. - Usar un índice o variable para referenciar al usuario autenticado dentro de la lista.
- Usar
len(usuarios)si necesitan conocer cuántos usuarios hay.
- Solicitar datos de usuario por consola al inicio.
- Usar variables separadas (rut1, clave1, rut2…).
- Asumir que solo existe una cuenta en el sistema.
Sigue sin permitirse
- Funciones definidas por el estudiante (
def). - Programación orientada a objetos (
class).
Restricciones de Implementación
Deben usar
No deben usar
Validaciones Mínimas Esperadas
- Autenticación correcta buscando en la lista.
- Opción de menú válida.
- Montos positivos en todas las operaciones.
- Saldo suficiente en retiros y transferencias.
- RUT de destino no vacío y distinto al propio.
- Mensajes claros cuando ocurra un error.
Entregable
- Archivo
.pycon la solución completa. - Lista
usuarioscon al menos 3 diccionarios precargados. - Código que se ejecute sin errores desde consola.
- Cumplimiento de todas las restricciones indicadas.
Criterios de Evaluación
| Criterio | Relevancia |
|---|---|
| Lista de usuarios correctamente definida como lista de diccionarios | Alto |
| Búsqueda del usuario en la lista para autenticación | Alto |
| Acceso y modificación correcta de datos vía claves del diccionario | Alto |
| Funcionamiento correcto del menú y todas las operaciones | Alto |
| Validación de entradas y operaciones | Medio |
| Claridad y orden de los mensajes al usuario | Medio |
| Respeto por restricciones (sin def, sin class, sin sets/tuplas) | Alto |