El alumnado trabajará un caso práctico real: la gestión de las campañas de aceituna. En muchas cooperativas y pequeñas almazaras se siguen usando hojas de cálculo o anotaciones manuales.
El objetivo educativo es que aprendan a automatizar este proceso mediante un algoritmo en Python, desarrollando un programa que:

  • Permita introducir un número indeterminado de entregas.
  • Calcule automáticamente el peso total y el rendimiento medio.
  • Genere un informe final en PDF.

Esta situación permite conectar la programación con los sectores productivos de Andalucía y generar aprendizajes significativos con datos reales.

from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

registros = []
kilos_total = 0
aceite_total = 0

while True:
    registro = input("¿Quieres añadir un registro? (S/N): ")

    if registro.upper() == "S":
        kilos = float(input("Introduce los kilos recogidos: "))
        rendimiento = float(input("Introduce el rendimiento medio (%): "))
        aceite = kilos * (rendimiento / 100)

        registros.append((kilos, rendimiento, aceite))

        kilos_total += kilos
        aceite_total += aceite

        print("Registro añadido")
        print(f"Kilos acumulados: {kilos_total} KG")
        print(f"Aceite acumulado: {aceite_total:.2f} L\n")

    elif registro.upper() == "N":
        break
    else:
        print("Opción no válida")

w, h = A4
c = canvas.Canvas("almazara.pdf", pagesize=A4)

x = 50
y = h - 50

c.setFont("Helvetica-Bold", 18)
c.drawCentredString(w / 2, y, "Almazara")

y -= 20
c.line(50, y, w - 50, y)

y -= 40
c.setFont("Helvetica-Bold", 10)
c.drawString(50, y, "KG recogidos")
c.drawString(200, y, "Rendimiento %")
c.drawString(350, y, "Total aceite (L)")

y -= 5
c.line(50, y, w - 50, y)

c.setFont("Helvetica", 10)
y -= 20

for i, (kilos, rendimiento, aceite) in enumerate(registros, start=1):
    c.drawString(30, y, f"{i}.")
    c.drawString(50, y, f"{kilos:.2f}")
    c.drawString(200, y, f"{rendimiento:.2f}")
    c.drawString(350, y, f"{aceite:.2f}")

    y -= 20

y -= 10
c.line(50, y, w - 50, y)

y -= 25
c.setFont("Helvetica-Bold", 11)
c.drawString(50, y, f"Kilos totales: {kilos_total:.2f} KG")
c.drawString(300, y, f"Aceite total: {aceite_total:.2f} L")

c.showPage()
c.save()

print("\nPDF generado correctamente: almazara.pdf")


#Francisco José Plaza García

https://drive.google.com/file/d/1EyAx0KOg541JQJFT5XE4mXIWNYDl05pR/view?usp=sharing

El programa entra en un bucle donde te pregunta:

¿Quieres añadir un registro? (S/N)

Si escribes S:

  • Te pide los kilos recogidos.
  • Te pide el rendimiento medio (porcentaje).
  • Calcula el aceite con esta fórmula:

aceite = kilos *(rendimiento / 100)

Por ejemplo:
Si recoges 100 kg y el rendimiento es 20%, obtienes 20 litros de aceite.

Guarda cada registro en una lista y va sumando:

  • Los kilos totales.
  • El aceite total.

Si escribes N, termina de pedir datos.

Después de eso, el programa crea un archivo PDF llamado «almazara.pdf» usando la librería reportlab.

En el PDF hace esto:

  1. Escribe el título «Almazara».
  2. Dibuja una tabla con columnas:
    • KG recogidos
    • Rendimiento %
    • Total aceite (L)
  3. Escribe todos los registros que introdujiste.
  4. Al final pone:
    • Kilos totales.
    • Aceite total.

Finalmente guarda el archivo y muestra el texto:
PDF generado correctamente: almazara.pdf