FPY-1101  ·  Taller de Fundamentos de Programación

Cajero Automático
con Listas y Diccionarios

Versión 2 — uso de estructuras de datos compuestas en Python

Estructuras de Datos
Ing. en Informática · Analista en Programación Python — Consola Entrega: .py Trabajo individual Evolución del ejercicio anterior

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.

La diferencia clave: ya no existe un "Paso 1" de inicialización donde el usuario ingresa datos. Los datos de las cuentas están definidos directamente en el código como una lista de diccionarios. El programa comienza directamente en la autenticación.
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)

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:

# Lista de usuarios precargada — definida al inicio del programa
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
    }
]
Importante: Los campos del diccionario son un mínimo. Si su diseño necesita almacenar información adicional por usuario (por ejemplo, un historial textual de operaciones), pueden agregar más claves al diccionario — siempre que sean consistentes en todos los usuarios de la lista.

A
Autenticación
El programa solicita RUT y clave. Debe recorrer la lista de usuarios buscando un diccionario cuyo "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.
B
Menú de Acciones
Una vez autenticado, el sistema muestra el menú y permite ejecutar operaciones de forma repetida hasta que el usuario decida salir. Todas las operaciones leen y modifican los datos directamente desde el diccionario del usuario autenticado dentro de la lista.

Las operaciones son las mismas de la versión anterior. Se destacan los ajustes necesarios al trabajar con diccionarios.

1
Consultar Saldo
Muestra el saldo actual leyendo usuario["montoCuenta"] del usuario autenticado. Debe mostrarse también el nombre del titular: usuario["nombre"].
2
Retirar Dinero
Pide el monto a retirar y valida:
  • Que el monto sea mayor que 0.
  • Que exista saldo suficiente en usuario["montoCuenta"].
Si es válido, descuenta el monto actualizando el valor en el diccionario.
3
Depositar Dinero
Pide el monto a depositar. Valida que sea mayor que 0. Si es válido, suma el monto a usuario["montoCuenta"].
4
Cambiar Clave
Solicita la clave actual para confirmar identidad, luego la nueva clave. Validaciones:
  • 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.
Si es válida, actualiza usuario["clave"] en el diccionario.
5
Transferencia
Solicita RUT de destino y monto. Validaciones:
  • 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.
Si es válida, descuenta el monto del saldo del usuario autenticado.
Desafío opcional: Si el RUT de destino corresponde a otro usuario existente en la lista, sumar el monto a su "montoCuenta" también.
6
Salir
Termina la sesión del usuario actual. Se recomienda confirmar con una pregunta antes de cerrar.

Deben aplicar
  • Recorrer la lista con for o while para 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.
Ya no corresponde
  • 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).

Deben usar

variables input() int() / str() if / elif / else while for op. aritméticas op. lógicos op. comparación listas diccionarios indexación [ ] len()

No deben usar

funciones propias (def) class / POO tuplas sets módulos externos
  • 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.

  • Archivo .py con la solución completa.
  • Lista usuarios con al menos 3 diccionarios precargados.
  • Código que se ejecute sin errores desde consola.
  • Cumplimiento de todas las restricciones indicadas.
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