1. Faro

Nivel 7 · ¿En qué nivel de fidelidad está?

La solicitud

De Jordan Reyes, Director de Marketing

“Oro es $1,000 o más gastados Y al menos 5 pedidos. Plata es $500 o más gastados O 10 o más pedidos. Todos los demás son bronce. ¿En qué nivel está esta clienta? El campo de nombre del CRM está desordenado, así que arréglalo para la etiqueta.”

Tu objetivo

Asigna a result un str con la forma "Dana Whitfield: silver": el nombre sin los espacios de alrededor y con cada palabra capitalizada, dos puntos y un espacio, y después el nivel en minúsculas. Reglas de nivel: 'gold' si spend es al menos 1000 y orders es al menos 5; en otro caso 'silver' si spend es al menos 500 o orders es al menos 10; en otro caso 'bronze'.

  • Guarda un texto (str) en resultpendiente

Tu código

Python

Cargando el editor…

    ResultadoPresiona Ejecutar para ver el tuyo

    Mote revisa tu resultado

    Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.

    La lección

    and, or y el orden de las ramas

    and es verdadero solo cuando ambos lados lo son. or es verdadero cuando al menos un lado lo es. Oro usa and y plata usa or, y esa diferencia decide el nivel de Dana:

    spend >= 1000 and orders >= 5    # True and False  -> False
    spend >= 500 or orders >= 10     # True or False   -> True

    Una cadena if/elif/else se detiene en la primera rama verdadera, así que el orden importa. Pon primero el nivel más exigente. Si plata fuera primero, un cliente con $3,000 y 20 pedidos coincidiría con plata y la rama de oro nunca se ejecutaría.

    if spend >= 1000 and orders >= 5:
        tier = "gold"
    elif spend >= 500 or orders >= 10:
        tier = "silver"
    else:
        tier = "bronze"

    Un cliente con $200 gastados y 12 pedidos cae en plata por el lado de los pedidos del or. Un cliente con $480 y 3 pedidos pasa a bronce.

    Cuando una regla mezcla and y or en una línea, añade paréntesis para que la agrupación sea obvia para el siguiente lector: (spend >= 1000 and orders >= 5) or vip. Python evalúa and antes que or, pero nadie debería tener que recordarlo para revisar una regla de negocio. Las condiciones cortas y explícitas también son mucho más fáciles de probar una a una cuando un cliente pregunta por qué acabó en el nivel equivocado.

    Limpiar el texto antes de mostrarlo

    Los nombres escritos en un CRM llegan con espacios sueltos y mayúsculas al azar. Los métodos de string devuelven un string nuevo y limpio, y se pueden encadenar:

    "  dana WHITFIELD ".strip()           # 'dana WHITFIELD'
    "  dana WHITFIELD ".strip().title()   # 'Dana Whitfield'

    .title() pone en mayúscula la primera letra de cada palabra y el resto en minúscula. Sirve para la mayoría de los nombres, pero no es perfecto: “mcallister” se convierte en “Mcallister”, no en “McAllister”. Para una etiqueta rápida suele ser aceptable; para un envío postal querrías una fuente más limpia.

    Construir la etiqueta

    Un f-string mete valores en el texto. Todo lo que está entre llaves se evalúa, incluidas las llamadas a métodos:

    f"{name.strip().title()}: {tier}"     # 'Dana Whitfield: silver'

    Errores comunes

    • Intercambiar and y or entre los niveles. Las palabras de la política («y», «o») se corresponden directamente con las palabras clave de Python, así que cópialas con cuidado.
    • Usar > cuando la regla dice «al menos». $1,000 exactos ya son territorio oro, así que la prueba es >=.
    • Poner plata antes que oro.
    • Llamar a .title() pero olvidar .strip(), lo que deja espacios al principio de la etiqueta.

    Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.