Sistema de Cosecha de Café
Finca Cantares
Un programa en Python que aplica lógica booleana (AND, OR, NOT) para determinar si es posible realizar la cosecha de café en un día dado, evaluando cuatro variables clave de la finca.
"El campo colombiano y el código comparten algo esencial: ambos requieren que cada condición esté lista antes de avanzar."
— Reflexión del proyecto01 Análisis del Problema
En la Finca Cantares, ubicada en Colombia, el caficultor necesita tomar decisiones diarias sobre si iniciar o no la recolección del café. Esta decisión depende de cuatro condiciones fundamentales que deben evaluarse cada mañana.
El problema requiere modelar un proceso de decisión real utilizando variables booleanas y operadores lógicos, convirtiendo un proceso manual y empírico en un sistema automatizado y preciso.
| Variable | Descripción | True | False |
|---|---|---|---|
cafe_maduro |
El café está en punto de cosecha | Sí, listo | Aún no |
no_lluvia |
Las condiciones climáticas son favorables | Sin lluvia | Lloviendo |
trabajadores |
Hay personal disponible para cosechar | Disponibles | No hay |
transporte |
Se puede llevar el café al punto de venta | Disponible | No hay |
02 Diseño del Sistema
El sistema sigue un flujo de decisión en cascada: primero verifica la condición ideal (todas las variables en True), luego evalúa condiciones parciales con alertas específicas, y finalmente gestiona los casos de fallo.
Las condiciones lógicas implementadas son:
if cafe_maduro AND no_lluvia AND trabajadores AND transporte
elif cafe_maduro AND NOT transporte AND trabajadores
elif cafe_maduro AND NOT trabajadores AND transporte
elif NOT cafe_maduro OR NOT trabajadores OR NOT transporte
03 Código del Programa Explicado
print("SISTEMA DE COSECHA DE CAFÉ finca cantares") print() # Variables booleanas — conversión de texto a True/False cafe_maduro = input("El cafe esta maduro? (si/no): ").strip().lower() == "si" no_lluvia = input("No esta lloviendo? (si/no): ").strip().lower() == "si" trabajadores = input("Hay trabajadores disponibles? (si/no): ").strip().lower() == "si" transporte = input("Hay transporte disponible? (si/no): ").strip().lower() == "si" # Mostrar estado de cada variable print(f"Café maduro: {cafe_maduro}") print(f"Sin lluvia: {no_lluvia}") print(f"Trabajadores listos: {trabajadores}") print(f"Transporte disponible: {transporte}") print() # Condición principal — AND: todas deben ser True if cafe_maduro and no_lluvia and trabajadores and transporte: print("¡Todo listo! Se puede coger el cafe hoy.") # Condiciones parciales — AND + NOT elif cafe_maduro and not transporte and trabajadores: print("El café está listo y hay trabajadores, pero falta transporte.") elif cafe_maduro and not trabajadores and transporte: print("El café está listo y hay transporte, pero faltan trabajadores.") elif cafe_maduro and not no_lluvia: print("El café está maduro pero está lloviendo. Hay que esperar.") elif not cafe_maduro: print("El café aún no está maduro. Esperar a mañana.") # Condición con OR — múltiples fallos elif not cafe_maduro or not trabajadores or not transporte: print("Faltan condiciones esenciales para la cosecha.") else: print("No se puede coger cafe hoy. Faltan varias condiciones.") print() print("Sistema desarrollado para Finca Cafetera JPCOBX10")
Captura de entradas con input()
Cada variable se obtiene con input(), se limpia con .strip() para quitar espacios, se convierte a minúsculas con .lower() y se compara con "si". Si el usuario escribe "si", la variable es True; cualquier otra respuesta la deja en False.
Operador AND — condición principal
La instrucción if cafe_maduro and no_lluvia and trabajadores and transporte solo es True cuando las cuatro variables son True simultáneamente. Si alguna falla, Python evalúa el siguiente bloque.
Operador NOT — alertas específicas
not transporte invierte el valor booleano: si transporte es False, not transporte es True, activando esa rama. Esto permite dar un mensaje preciso según qué condición falla exactamente.
Operador OR — múltiples fallos
not cafe_maduro or not trabajadores or not transporte se activa si al menos una de estas condiciones falla. Es el caso de error general para cuando fallan varias cosas al tiempo.
f-strings para mostrar el estado
Con print(f"Café maduro: {cafe_maduro}") se usa una f-string que inserta directamente el valor booleano (True/False) dentro del mensaje, mostrando el estado de cada variable antes de tomar la decisión.
04 Pruebas del Programa
Resultado de las pruebas — 7 de 7 casos verificados correctamente:
$ python cosecha_cafe.py SISTEMA DE COSECHA DE CAFÉ finca cantares El cafe esta maduro? (si/no): si No esta lloviendo? (si/no): si Hay trabajadores disponibles? (si/no): si Hay transporte disponible? (si/no): si Café maduro: True Sin lluvia: True Trabajadores listos: True Transporte disponible: True ¡Todo listo! Se puede coger el cafe hoy. Sistema desarrollado para Finca Cafetera JPCOBX10
Hay transporte disponible? (si/no): no El café está listo y hay trabajadores, pero falta transporte.
El cafe esta maduro? (si/no): no El café aún no está maduro. Esperar a mañana.