La solicitud

De Megan Collins, Directora de Ventas
Tu objetivo
Define size_band(total) que devuelva 'small' para totales menores que 50, 'medium' desde 50 hasta 150 sin incluirlo, y 'large' para 150 o más. Asigna a result una lista con el rango de cada valor de order_totals, en el mismo orden.
- Guarda una lista de 7 en
resultpendiente
Tu código
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Megan, y por qué
La lección
Las reglas pertenecen a las funciones
Los rangos, niveles y etiquetas están por todas partes en los datos de negocio: tamaño de pedido, nivel de valor del cliente, velocidad de entrega, grupos de edad. La regla en sí es sencilla, pero se usa en muchos sitios: un informe, un gráfico, un segmento de correo. Ponla en una función y todos los lugares usan los mismos límites.
def size_band(total):
if total < 50:
return "small"
elif total < 150:
return "medium"
else:
return "large"
Como return termina la función, gana la primera rama verdadera. Eso simplifica cada condición: cuando
Python comprueba total < 150, ya sabe que el total no es menor que 50.
Aplicarla a muchos valores
Una función que funciona con un valor se puede aplicar a una lista entera con una comprehension:
bands = [size_band(t) for t in order_totals]
También puedes pasar la propia función, sin paréntesis, a map:
list(map(size_band, order_totals))
Ambas dan la misma lista. La comprehension es más común en el Python moderno porque se lee de forma más
natural y es fácil de ampliar, por ejemplo [size_band(t) for t in order_totals if t > 0].
Pasar una función por su nombre, sin llamarla, es una idea importante. size_band es la función;
size_band(62.40) es su resultado. Los métodos de pandas como .map() y .apply() reciben la propia
función y la llaman por ti con cada valor.
Los límites, otra vez
Los valores de borde de este lote son deliberados: 49.99, 50.00, 149.99 y 150.00. Ejecuta tu función exactamente con ellos y compáralos con el encargo:
| total | rango |
|---|---|
| 49.99 | small |
| 50.00 | medium |
| 149.99 | medium |
| 150.00 | large |
Si 150.00 salió como medium, la segunda comprobación usó <= en lugar de <. Probar valores justo en el
límite es la forma más rápida de encontrar ese tipo de error.
Mantén las funciones puras
size_band solo mira su entrada y devuelve un valor. No imprime, no cambia variables globales ni
modifica la lista. Las funciones así, llamadas funciones puras, son fáciles de probar y seguras de
reutilizar. Cuando una función necesita leer algún ajuste, pásalo como parámetro en lugar de buscar una
variable definida en otro sitio:
def size_band(total, small_limit=50, large_limit=150):
...
Errores comunes
- Olvidar
returnen una rama, de modo que algunos valores vuelven comoNone. - Ordenar las comprobaciones de mayor a menor pero mantener comparaciones con
<, lo que manda todo al primer rango. - Escribir
map(size_band(), order_totals)con paréntesis. Eso llama a la función sin argumento y falla.
En una columna entera
Si los totales están en una columna de un DataFrame, la misma función sirve ahí:
df["order_total"].map(size_band) devuelve un rango para cada fila. Para rangos numéricos, pd.cut lo
hace sin escribir una función:
pd.cut(df["order_total"], bins=[0, 50, 150, float("inf")],
labels=["small", "medium", "large"], right=False)
right=False hace que cada rango incluya su límite inferior y excluya el superior, así que 50.00 es
medium y 150.00 es large, igual que en size_band.
¡Linterna encendida!
Practicaste: functionsif elif elselist comprehensionbanding
- Resuelto
- Sin pistas
- Al primer intento
