Python básico

Funciones y proyecto final

Lección 8 de 8 · 20 min

Ponerle nombre a un bloque de código

Una función es un trozo de código con nombre, que escribes una vez y usas cuantas veces quieras. Es lo que evita tener el mismo cálculo copiado en cinco sitios - y que al cambiar la regla se te olvide uno.

Tu primera función
def calcular_iva(base):
    """Devuelve el valor del IVA (19%) de una base gravable."""
    return base * 0.19

# Ahora se usa las veces que haga falta
print(calcular_iva(100000))
print(calcular_iva(250000))
Resultado
19000.0
47500.0

Las cuatro partes de una función

def y el nombre

def calcular_iva la declara. El nombre debe decir qué hace, y por eso casi siempre empieza por un verbo: calcular_, leer_, validar_.

Los parámetros

Lo que va entre paréntesis: los datos que la función necesita para trabajar. Dentro de ella se usan como variables normales.

El docstring

El texto entre triples comillas de la primera línea. Explica qué hace y qué devuelve. No es adorno: es lo que verá quien use tu función dentro de seis meses, y ese suele ser tú.

return

Lo que la función devuelve a quien la llamó.

⚠️ Sin return, la función devuelve None, y el cálculo se pierde aunque lo haya hecho bien.

La confusión clásica: print no es return. print() muestra algo en pantalla y desaparece; return entrega el valor para poder seguir operando con él. Una función que solo imprime no sirve para calcular un total: el número se vio, pero nadie lo tiene.

Proyecto final: reporte de ventas

Junta todo el curso: variables, operadores, condicionales, ciclos, listas, diccionarios y funciones. Es un programa que un negocio real podría usar mañana.

Escríbelo en un archivo reporte.py y ejecútalo.

reporte.py
# Reporte de ventas del dia

IVA = 0.19
META_DIARIA = 500000
DESCUENTO_MAXIMO = 0.30   # tope permitido, se valida abajo

ventas = [
    {"producto": "Teclado", "cantidad": 2, "valor": 189000, "descuento": 0.05},
    {"producto": "Mouse",   "cantidad": 5, "valor":  45000, "descuento": 0.00},
    {"producto": "Monitor", "cantidad": 1, "valor": 890000, "descuento": 0.10},
    {"producto": "Cable",   "cantidad": 8, "valor":  12000, "descuento": 0.50},
]


def validar_descuento(pct):
    """Recorta el descuento al tope permitido. Devuelve el porcentaje aplicable."""
    if pct > DESCUENTO_MAXIMO:
        return DESCUENTO_MAXIMO
    return pct


def calcular_linea(venta):
    """Calcula el total de una venta, con descuento validado e IVA."""
    bruto = venta["cantidad"] * venta["valor"]
    pct = validar_descuento(venta["descuento"])
    base = bruto - (bruto * pct)
    return base + (base * IVA)


def imprimir_reporte(ventas):
    """Imprime el detalle linea por linea y devuelve el total del dia."""
    total = 0
    print("REPORTE DE VENTAS")
    print("-" * 46)

    for i, venta in enumerate(ventas, 1):
        linea = calcular_linea(venta)
        total += linea
        aviso = ""
        if venta["descuento"] > DESCUENTO_MAXIMO:
            aviso = "  <-- descuento recortado al tope"
        print(i, venta["producto"], "->", round(linea), aviso)

    print("-" * 46)
    return total


total_dia = imprimir_reporte(ventas)

print("TOTAL DEL DIA:", round(total_dia))
print("META DIARIA:  ", META_DIARIA)

if total_dia >= META_DIARIA:
    print("Meta CUMPLIDA. Excedente:", round(total_dia - META_DIARIA))
else:
    print("Faltaron:", round(META_DIARIA - total_dia))
Resultado
REPORTE DE VENTAS
----------------------------------------------
1 Teclado -> 427329 
2 Mouse -> 267750 
3 Monitor -> 953190 
4 Cable -> 79968   <-- descuento recortado al tope
----------------------------------------------
TOTAL DEL DIA: 1728237
META DIARIA:   500000
Meta CUMPLIDA. Excedente: 1228237

Fíjate en la cuarta línea. El Cable traía un descuento del 50%, pero el tope de la empresa es 30%: validar_descuento() lo recortó y el reporte lo avisó.

Esa comprobación no es un detalle del ejercicio. Una regla que existe pero no se comprueba en el código, no existe. Es la causa de fraudes reales: un tope de descuento configurado y nunca validado permite vender por $100 lo que cuesta $22.000, con una sola operación.

Cómo llevarlo a tu propio trabajo

  1. Escoge UNA tarea, la más aburrida

    La que haces cada semana y te quita media hora. No empieces por la más importante: empieza por la más repetitiva.

  2. Escribe los pasos en español

    Antes de tocar el teclado. Si no puedes escribirlos como una lista clara, todavía no está lista para automatizar.

  3. Reemplaza los datos de ejemplo por los tuyos

    La lista ventas de arriba es la tuya, con tus columnas. Empieza escribiendo cinco registros a mano; leerlos desde Excel es el paso siguiente.

  4. Compara contra el resultado que ya conoces

    Corre el script sobre datos de un mes cerrado y comprueba que da el mismo número que sacaste a mano. Un programa que no se verificó contra algo conocido no está terminado.

  5. Trabaja sobre una copia

    Siempre. El archivo original se deja intacto hasta que confíes en el script.

Repaso del curso completo

Responde mentalmente y haz clic para comprobar.

Y ahora, ¿por dónde sigo?

Leer y escribir archivos de Excel y CSV

Es el paso natural: hasta aquí los datos estaban escritos en el código. Con openpyxl y pandas se leen archivos reales, y ahí el ahorro de tiempo se multiplica.

Limpiar datos de verdad

Los datos reales llegan sucios: acentos rotos por una importación mal codificada, la misma ciudad escrita de ocho formas, duplicados, campos con basura. Detectarlo y corregirlo es la habilidad más demandada, y es el contenido del curso intermedio.

Controlar los errores

try / except para que el programa no se caiga cuando alguien escribe letras donde iban números, o el archivo no está donde debía.

Programar tareas para que corran solas

Un script que hay que ejecutar a mano sigue dependiendo de que alguien se acuerde. Programarlo para que corra cada día a una hora es lo que lo convierte en automatización de verdad.

Última comprobación

¿Qué devuelve una función que no tiene return?

El tope de descuento está en una constante pero ninguna función lo comprueba. ¿Qué pasa?

¿Cuándo está terminado un script que automatiza una tarea?

Lo lograste

Empezaste sin haber programado nunca y terminas con un programa que calcula, decide, valida una regla de negocio y produce un reporte. Ya sabes automatizar una tarea.

El salto siguiente es el que hacen las empresas: pasar de automatizar una tarea a automatizar un proceso completo - ventas, inventario, cartera, nómina, facturación electrónica. En Monarca Computer llevamos años haciendo exactamente eso para empresas colombianas.

Terminaste Python básico. Presenta la evaluación y reclama tu certificado.

Quiero mi certificado ← Listas y diccionarios