1.2 · Condiciones (if / elif / else)

Nivel 1 · Fundamentos del lenguaje

1.2Condiciones (if / elif / else)

Objetivo: escribir ramificaciones con if/elif/else, entender la indentación obligatoria, y combinar comparaciones y lógica and/or/not.
Tiempo estimado: 12 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

Lo esencial en 30 segundos

  • El test decide, la indentación delimita: bloque indentado con 4 espacios después de : — sin llaves, nunca mezcles espacios/tabulaciones.
  • elif = la escala: evaluado en orden, parada en el primer verdadero — ordena de lo más específico a lo más general, else atrapa el resto.
  • Condiciones legibles: comparaciones encadenadas (18 <= age < 65), in para la pertenencia, valores falsos (None, 0, "", []) evaluados directamente.

Minicaso guiado — Nabil clasifica a los encuestados en Argel

Nabil debe clasificar a los encuestados de su encuesta por tramo: niño, adolescente, adulto, senior — con una tarifa de taller asociada. Primero escribe una cascada de if independientes con una indentación mezclada: IndentationError, y luego un encuestado de 26 años validado en dos tramos. Lo corrige con un if/elif/else ordenado de lo más específico a lo más general, 4 espacios en todas partes, y un test legible 18 <= age < 65: cada encuestado cae en exactamente un tramo.

Continuación del caso 1.1 — Nabil pasa del almacenamiento de datos a las decisiones.

1. El test decide, la indentación delimita

Una condición dirige el programa: if age >= 18: y luego bloque indentado con 4 espacios — la indentación es la estructura (sin llaves, sin end). elif (else if) evalúa otra condición si la anterior es falsa; else cubre todos los demás casos. Python evalúa en orden y se detiene en el primer bloque verdadero: ordena de lo más específico a lo más general.

Nabil convierte su edad introducida en int y luego escribe if/elif/else por tramos: el encuestado de 26 años ya no se cuenta dos veces, y VS Code convierte sus tabulaciones en espacios.

2. Condiciones que se leen

Python escribe los tests como se leen: comparaciones encadenadas (if 18 <= age < 65:), in para la pertenencia (if user in admis:), lógica and/or/not con cortocircuito. Valores « falsos »: None, 0, "", [], {} — if ma_liste: basta para evaluar el vacío. Diez if anidados señalan un problema de diseño (función, diccionario).

Nabil sustituye sus dobles comparaciones por 18 <= age < 65 y evalúa su lista de encuestados con if repondants:: el código se lee como la regla de negocio.

Error frecuente de interpretación: « La indentación es decorativa » o « = y == son intercambiables en un test ». No. En Python, el desplazamiento ES la estructura: una mezcla de espacios/tabulaciones lanza IndentationError y un bloque mal indentado cambia el sentido. Y = asigna (error de sintaxis en un if), == compara: escribir if age = 18 no evalúa nada, falla.
Decidir correctamente Evaluar en orden, indentar con espacios if / elif / else Evaluar enorden, específico primeroIndentación (4 espacios) Eldesplazamiento ES la estructuraTests legibles Encadenadas,in, and/or/not
Evaluar en orden, indentar con espacios
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Decidir: Nabil escribe if/elif/else por tramos, de lo más específico a lo más general, con un else que atrapa el resto. 2) Delimitar: 4 espacios después de cada :, coherencia estricta espacios contra tabulaciones. 3) Hacer legible: comparaciones encadenadas, in para la pertenencia, evaluación directa de los valores falsos. Lección: la escala ordenada + la indentación estricta = decisiones justas.

🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Tarifa que se lee como la regla

Tramos ordenados, como Nabil para sus talleres.

age = 26
if age < 12:
    tarif = 0
elif age < 26:
    tarif = 5
elif age < 65:
    tarif = 10
else:
    tarif = 7
print(f"Edad {age}: tarifa {tarif}")
print(18 <= age < 65)  # True: comparación encadenada

Lectura: cada tramo evaluado una vez, en orden — el else final atrapa los olvidados.

Lección: la comparación encadenada 18 <= age < 65 se lee como la regla de negocio.

Vocabulario de la sección

if / elif / else
if evalúa una condición; elif evalúa otra si la anterior es falsa; else cubre todos los demás casos. Evaluación en orden, parada en el primer verdadero.

Ejemplo sencillo: Los tramos de edad clasificados por Nabil.

Lo que no es: tres if independientes que validan dos veces el mismo caso.

Reflejo: una escala ordenada, específico primero, else al final.

Indentación
Desplazamiento al inicio de línea (4 espacios por convención) que define a qué bloque pertenece una instrucción. Obligatoria en Python, no decorativa.

Ejemplo sencillo: Los bloques de tramos indentados por Nabil.

Lo que no es: una mezcla de espacios/tabulaciones en el mismo archivo.

Reflejo: 4 espacios, coherencia estricta, VS Code como conversor.

Operadores de comparación
==, !=, <, >, <=, >= : comparan dos valores y devuelven un booleano. Python permite comparaciones encadenadas: 18 <= age < 65.

Ejemplo sencillo: El 18 <= age < 65 que califica a los adultos de Nabil.

Lo que no es: = en un test (asignación, no comparación).

Reflejo: == compara, = asigna; encadena cuando sea legible.

Operadores lógicos
and (y), or (o), not (no): combinan varias condiciones, con cortocircuito (parada en cuanto se conoce el resultado).

Ejemplo sencillo: El age >= 18 and permis de Nabil para el taller de conducción.

Lo que no es: apilar diez if anidados en lugar de combinar.

Reflejo: combina con and/or/not en lugar de anidar.

Expresión booleana
Toda expresión que vale True o False, evaluada por la condición. Los valores None, 0, "", [] son falsos: if ma_liste: basta.

Ejemplo sencillo: El if repondants: que verifica que Nabil tiene datos.

Lo que no es: comparar explícitamente con True/False en todas partes.

Reflejo: evalúa el vacío directamente, sin rodeos.

En la práctica — En la práctica — Escribir ramificaciones con if/elif/else

  1. Escribe un programa que lea una edad (input convertido en int) y muestre « Majeur » si ≥ 18, si no « Mineur ». Cuida la indentación de los bloques.
  2. Añade un caso intermedio con elif: « Enfant » (< 12), « Adolescent » (< 18), « Adulte » (si no).
  3. Combina condiciones: « if age >= 18 and permis == True ». Prueba and, or y not.
  4. Provoca voluntariamente un IndentationError (desplaza una línea), lee el mensaje y corrige: familiarízate con este error.
Escribes decisiones claras con if/elif/else y dominas la indentación — el punto que más despista a los principiantes.

Guion listo para decir — explicar el orden de los elif (30 s)

« He ordenado los tramos de lo más específico a lo más general: Python se detiene en el primer test verdadero, así que el orden garantiza que un caso nunca caiga en dos tramos. Y el else final atrapa todo lo no previsto. »

Para decir en revisión de código; muestra la regla de negocio frente al código.

Modelo copiar-pegar — tramos ordenados + test legible

age = int(input("¿Edad? "))
if age < 12:
    categorie = "Niño"
elif age < 18:
    categorie = "Adolescente"
elif age < 65:
    categorie = "Adulto"
else:
    categorie = "Senior"
print(f"Categoría: {categorie}")
if 18 <= age < 65:
    print("Objetivo taller principal")

Tramos en Argel

Como Nabil: una escala if/elif/else por tramo — añadir un tramo es insertar un elif en el rango correcto, sin tocar los demás.

Test de negocio legible

18 <= age < 65 se relee como la regla: la comparación encadenada evita el and redundante.

Pertenencia

if code in valides para los códigos de encuesta: la pertenencia sustituye una retahíla de == or ==.

Lista vacía o no

if repondants: basta — no hace falta comparar la longitud con cero, el falsy hace el trabajo.

✓ Buenas prácticas

  • Indenta con 4 espacios, nunca tabulaciones mezcladas.
  • Ordena los elif de lo más específico a lo más general.
  • Evalúa el falsy directamente (if liste:) y encadena las comparaciones.

✗ Errores frecuentes

  • Mezclar tabulaciones y espacios (IndentationError).
  • Escribir = en lugar de == en el test.
  • Apilar diez if anidados en lugar de repensar la estructura.

Puntos clave

  • if / elif / else dirigen el programa según condiciones, evaluadas en orden hasta la primera verdadera.
  • La indentación (4 espacios) delimita los bloques: es obligatoria, no decorativa.
  • Comparaciones: == != < > <= >= (encadenables); lógica: and, or, not.
  • Una condición evalúa una expresión booleana (True/False); None, 0, "" y [] son falsos.

Desafío 48h — aplica mañana

Toma el modelo anterior: añade un 4.º tramo (un elif en el rango correcto), sustituye un doble test por una comparación encadenada, y provoca y corrige un IndentationError. Verifica cada tramo en local. 20 minutos bastan.

Lista de salida de la sección
  • Clasifico en if/elif/else ordenado con un else que atrapa el resto.
  • Mi indentación es estricta (4 espacios, cero mezclas).
  • Escribo tests legibles (encadenadas, in, and/or/not).
Autoevaluación 1-5: ¿mis tramos están ordenados sin solapamientos?¿mis condiciones se leen como la regla de negocio?

Preguntas frecuentes

¿Cuántos espacios para la indentación?

La convención (PEP 8) es de 4 espacios por nivel. Lo esencial es la coherencia: nunca mezcles espacios y tabulaciones en un mismo archivo. VS Code convierte las tabulaciones en espacios automáticamente — activa la visualización de blancos para verificar.

¿Se pueden encadenar varios elif?

Sí, tantos como necesites. Python evalúa las condiciones de arriba abajo y ejecuta el primer bloque cuya condición sea verdadera, y luego sale de la estructura. El else final (opcional) atrapa todos los casos restantes — prevélo para los olvidos.

Comprueba tu comprensión

¿Qué ocurre si mezclas espacios y tabulaciones?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 1Preguntas inéditas y más difíciles para validar tus conocimientos