From 2a47f1ee2c77de5021075e49430ed7c8f7f8056e Mon Sep 17 00:00:00 2001 From: DeyviGranados Date: Sun, 13 Apr 2025 12:52:57 -0500 Subject: [PATCH] =?UTF-8?q?Se=20agrega=20l=C3=B3gica=20en=20main.py=20y=20?= =?UTF-8?q?documentaci=C3=B3n=20actualizada=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 41 +++++++++++++++++++++++ README.md | 98 +++++++++++++++++++++++++++++------------------------- main.py | 65 ++++++++++++++++++++++++++++++++++++ 3 files changed, 158 insertions(+), 46 deletions(-) create mode 100644 .gitignore create mode 100644 main.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..94ced41 --- /dev/null +++ b/.gitignore @@ -0,0 +1,41 @@ +# Visual Studio +.vs/ +*.user +*.suo +*.userosscache +*.sln.docstates +*.swp + +# Python +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# VSCode +.vscode/ + +# Pytest +.cache/ + +# Mac +.DS_Store + +# Logs +*.log + +# SQLite local cache +*.sqlite + +# Backup files +*.bak +*.backup + +# Ignore everything in .venv folder +.venv/ diff --git a/README.md b/README.md index 668a6a2..16e363c 100644 --- a/README.md +++ b/README.md @@ -15,52 +15,58 @@ Desarrolla una aplicación de línea de comandos (CLI) que procese un archivo CS --- -## Instrucciones +## Instrucciones de Ejecución -1. **Repositorio Base:** - Clona o haz un fork del repositorio base disponible en: +### Requisitos: +- Tener Python 3.x instalado en el equipo. + +### Pasos para ejecutar la aplicación: + +1. Clona o haz un fork del repositorio base disponible en: `https://github.com/codeableorg/interbank-academy-25` -2. **Entrada de Datos:** - La aplicación deberá leer un archivo CSV. Ejemplo de contenido: - - ``` - id,tipo,monto - 1,Crédito,100.00 - 2,Débito,50.00 - 3,Crédito,200.00 - 4,Débito,75.00 - 5,Crédito,150.00 - ``` - -3. **Salida del Programa:** - La aplicación debe mostrar el reporte final en la terminal. - Ejemplo de salida: - - ``` - Reporte de Transacciones - --------------------------------------------- - Balance Final: 325.00 - Transacción de Mayor Monto: ID 3 - 200.00 - Conteo de Transacciones: Crédito: 3 Débito: 2 - ``` - -4. **Lenguaje de Programación:** - Utiliza el lenguaje de tu preferencia. Opciones recomendadas: - - - Python - - Java - - C# - - JavaScript (Node.js) - -5. **README del Proyecto:** - Incluye un archivo `README.md` con la siguiente estructura: - - - **Introducción:** Breve descripción del reto y su propósito. - - **Instrucciones de Ejecución:** Cómo instalar dependencias y ejecutar la aplicación. - - **Enfoque y Solución:** Lógica implementada y decisiones de diseño. - - **Estructura del Proyecto:** Archivos y carpetas principales. - -6. **Documentación y Calidad del Código:** - - Código bien documentado y fácil de leer. - - Comentarios explicando pasos clave y lógica del programa. +2. Verifica que el archivo **`data.csv`** esté en la misma carpeta que **`main.py`** (como ya tienes actualmente). + +3. Abre una terminal en la carpeta del proyecto. + +4. Ejecuta el siguiente comando: + +```bash +python main.py +``` + +El resultado se mostrará directamente en la terminal. +_No es necesario instalar dependencias adicionales, ya que se utilizan únicamente librerías estándar de Python._ + +--- + +## Enfoque y Solución + Estructura del Proyecto + +La solución se estructura de la siguiente manera: + +- **Lectura del CSV:** + Se utiliza la librería estándar `csv.DictReader` para procesar cada línea como un diccionario. + +- **Cálculo del balance final:** + Se suman los montos de las transacciones de tipo "Crédito" y se restan los de tipo "Débito". + +- **Identificación de la transacción de mayor monto:** + Se utiliza la función `max()` para encontrar la transacción con el monto más alto. + +- **Conteo de transacciones por tipo:** + Se utilizan expresiones generadoras para contar cuántas transacciones corresponden a cada tipo. + +- **Simplicidad del código:** + La aplicación se mantiene sencilla y clara, utilizando funciones separadas para cada responsabilidad. + +## Estructura del Proyecto + +``` +RetoTecnico/ +│ .gitignore # Archivo para ignorar archivos no deseados por Git +│ data.csv # Archivo CSV con las transacciones bancarias +│ main.py # Script principal de la aplicación +│ README.md # Documentación del proyecto (este archivo) +``` + +✅ Proyecto listo para ejecutar y entregar. diff --git a/main.py b/main.py new file mode 100644 index 0000000..92fa25f --- /dev/null +++ b/main.py @@ -0,0 +1,65 @@ +# Importamos la librería estándar para trabajar con archivos CSV +import csv + +# Función para leer las transacciones desde el archivo CSV +def leer_transacciones(nombre_archivo): + transacciones = [] + # Abrimos el archivo CSV en modo lectura + with open(nombre_archivo, newline='', encoding='utf-8') as archivo_csv: + lector = csv.DictReader(archivo_csv) + for fila in lector: + # Convertimos los datos a los tipos adecuados y los almacenamos en la lista + transacciones.append({ + 'id': int(fila['id']), + 'tipo': fila['tipo'], + 'monto': float(fila['monto']) + }) + return transacciones + +# Función para calcular el balance final de las transacciones +def calcular_balance(transacciones): + # Sumamos los montos de tipo 'Crédito' y restamos los de tipo 'Débito' + creditos = sum(t['monto'] for t in transacciones if t['tipo'] == 'Crédito') + debitos = sum(t['monto'] for t in transacciones if t['tipo'] == 'Débito') + return creditos - debitos + +# Función para encontrar la transacción con el monto más alto +def transaccion_mayor(transacciones): + # Utilizamos la función max() con una función lambda para obtener la transacción con mayor monto + mayor = max(transacciones, key=lambda t: t['monto']) + return mayor + +# Función para contar la cantidad de transacciones por tipo +def contar_transacciones(transacciones): + # Contamos cuántas transacciones son de tipo 'Crédito' y cuántas son de tipo 'Débito' + creditos = sum(1 for t in transacciones if t['tipo'] == 'Crédito') + debitos = sum(1 for t in transacciones if t['tipo'] == 'Débito') + return creditos, debitos + +# Función principal que coordina la ejecución del programa +def main(): + # Nombre del archivo CSV que contiene las transacciones + nombre_archivo = 'data.csv' + + # Leemos las transacciones desde el archivo + transacciones = leer_transacciones(nombre_archivo) + + # Calculamos el balance final + balance = calcular_balance(transacciones) + + # Obtenemos la transacción con el mayor monto + mayor_transaccion = transaccion_mayor(transacciones) + + # Contamos las transacciones por tipo + creditos, debitos = contar_transacciones(transacciones) + + # Mostramos el reporte en la terminal + print("Reporte de Transacciones") + print("-" * 40) + print(f"Balance Final: {balance:.2f}") + print(f"Transacción de Mayor Monto: ID {mayor_transaccion['id']} - {mayor_transaccion['monto']:.2f}") + print(f"Conteo de Transacciones: Crédito: {creditos} Débito: {debitos}") + +# Verificamos si este archivo es el programa principal y ejecutamos la función main +if __name__ == '__main__': + main()