La solicitud

De Daniel Brooks, Director de Operaciones
Tu objetivo
Define fee_for(weight) que recorra tiers en orden y devuelva la tarifa del primer tramo cuyo peso máximo sea mayor o igual que weight, o None si ningún tramo encaja. Asigna a result un diccionario que asocie cada id de paquete de parcels con fee_for(su peso), en el mismo orden.
- Guarda un dict 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 Daniel, y por qué
La lección
Reglas como datos
Podrías escribir la tarifa como una cadena de if/elif, pero cuando las reglas llegan como una tabla,
mantenlas como tabla. Una lista de pares (max_weight, fee), del más ligero al más pesado, contiene
toda la tarifa:
tiers = [(1, 6.95), (5, 9.95), (20, 14.95), (70, 49.00)]
La función entonces no necesita números propios. Cuando el transportista cambia un precio o añade un tramo, editas la lista y la lógica sigue igual.
Devuelve en cuanto lo sepas
La función recorre los tramos en orden y se detiene en el primero que encaja. return termina la función
de inmediato, lo que también termina el bucle:
def fee_for(weight):
for max_weight, fee in tiers:
if weight <= max_weight:
return fee # found it: leave now
return None # the loop finished without a match
Repasando los paquetes de hoy:
- 0.8 kg: 0.8 ≤ 1, así que $6.95 en la primera comprobación.
- 1.0 kg: justo en el límite. «Hasta 1 kg» incluye el 1, de ahí el
<=, y la tarifa es $6.95. - 5.5 kg: demasiado pesado para 1 y 5, encaja en 20, así que $14.95.
- 85 kg: falla las cuatro pruebas, el bucle termina y la función devuelve
None.
El orden de la lista importa. Como los tramos van de ligero a pesado, la primera coincidencia es también el tramo más barato en el que encaja. Si la lista estuviera desordenada, un paquete de 0.8 kg podría coincidir primero con el tramo de 70 kg y cobrarse como carga.
None significa «sin respuesta»
None es el valor de Python para «aquí no hay nada». Es el valor de retorno correcto para el paquete de
85 kg, porque no se aplica ninguna tarifa de la tabla. Devolver 0 parecería envío gratis, lo cual es un
error costoso. En el diccionario de resultados el paquete aparece como None, así que quien lo lea sabe
que debe pedir una cotización. Cualquier función que termine sin llegar a un return también devuelve
None, así que la última línea está sobre todo para dejar clara la intención.
Errores comunes
- Escribir
else: return Nonedentro del bucle. La función se detiene tras comprobar solo el primer tramo, así que solo los paquetes de hasta 1 kg reciben tarifa. - Usar
<en lugar de<=, lo que cobra a un paquete de 1.0 kg la tarifa de 5 kg. - Devolver 0 para paquetes que no encajan en ningún tramo.
¡Linterna encendida!
Practicaste: functionsearly returnlookup tablenonefor loop
- Resuelto
- Sin pistas
- Al primer intento
