1.2Condiciones (if / elif / else)
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.
🔎 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
- 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.
- Añade un caso intermedio con elif: « Enfant » (< 12), « Adolescent » (< 18), « Adulte » (si no).
- Combina condiciones: « if age >= 18 and permis == True ». Prueba and, or y not.
- Provoca voluntariamente un IndentationError (desplaza una línea), lee el mensaje y corrige: familiarízate con este error.
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.
- 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).
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.
¿Qué ocurre si mezclas espacios y tabulaciones?