Skip to content

Recetario saludable: interfaz de consola en Python - #2

Open
u1987505 wants to merge 2 commits into
masterfrom
devin/1786440015-recetario-consola
Open

Recetario saludable: interfaz de consola en Python#2
u1987505 wants to merge 2 commits into
masterfrom
devin/1786440015-recetario-consola

Conversation

@u1987505

Copy link
Copy Markdown
Owner

Summary

Añade recetario.py, una aplicación de consola (solo funciones, sin POO, solo librería estándar) que lee recetas_saludables.csv con csv.DictReader y ofrece un menú en bucle: listar, ver detalle por id, buscar por nombre o ingrediente, filtrar por categoría o calorías máximas, y estadísticas (mín/media/máx de kcal, proteínas y tiempo medios).

El CSV no estaba en master, así que se incorpora en este PR junto al programa (100 recetas).

El menú se define como una tabla de datos, de forma que añadir una opción es una sola línea:

OPCIONES = [("1", "Listar todas las recetas", listar_todas), ...]
acciones = {clave: funcion for clave, _, funcion in OPCIONES}

Detalles de formato del CSV que maneja el código: los ingredientes vienen en un único campo separados por | y se imprimen como lista; los valores numéricos se convierten con a_numero() tolerante a errores para que un campo vacío o mal formado no rompa filtros ni estadísticas. Ctrl+D (EOFError) sale limpiamente igual que la opción 0.

Link to Devin session: https://app.devin.ai/sessions/0bb1ad0ffd4047cbaf20ed3023b1a1e2
Requested by: @u1987505

Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@u1987505 u1987505 self-assigned this Aug 11, 2026
Co-Authored-By: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@u1987505

Copy link
Copy Markdown
Owner Author

Pruebas end-to-end de recetario.py

Ejecutado en una terminal real (python3 recetario.py), contrastando cada salida con los valores calculados directamente del CSV mediante csv.DictReader.

Funcionalidad verificada
  • Carga 100 recetas; opción 1 termina en Total: 100 receta(s).
  • Opción 2 (id 7): ingredientes divididos por | como lista de viñetas, bloque nutricional y ambas fuentes.

Detalle receta id 7

  • Opción 7: 100, 350 / 453.8 / 560 kcal, 34.0 g, 20.0 min — coincide exactamente con el CSV.

Estadísticas

Entradas adversas (todas correctas, sin trazas)
  • id inexistente 999, texto de búsqueda vacío, categoría desconocida Postre, opciones de menú 9/abc/vacía.
  • Calorías -5 y abcHay que introducir un número positivo.; 350 → 12 recetas; 999999999 → 100 recetas ordenadas.
  • POLLO → 10 resultados y COMIDA → 100: búsquedas insensibles a mayúsculas.

Filtro de calorías

Dos defectos encontrados y ya corregidos en 52f71b1

1. Ctrl+C lanzaba una traza sin controlar (salida 130), a diferencia de Ctrl+D que salía limpio con 0. Corregido con except (EOFError, KeyboardInterrupt).

Traza KeyboardInterrupt

2. La búsqueda era sensible a acentos: brocoli → 0 resultados, brócoli → 13. Corregido con normalizar() (NFD + eliminación de marcas de combinación), aplicado a nombre, ingredientes y categoría.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant