Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
41 changes: 41 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -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/
98 changes: 52 additions & 46 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
65 changes: 65 additions & 0 deletions main.py
Original file line number Diff line number Diff line change
@@ -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()