En general, es una buena práctica no mezclar tabuladores y espacios al programar en Python. Hacer esto puede causar un TabError y tu programa no funcionara. Se coherente cuando programes: elige indentar usando tabulaciones o espacios y sigue la convención elegida en todo el programa.

Bloques de código e indentación

Una de las características más distintivas de Python es el uso de indentaciones para marcar bloques de código. Considera la declaración if de nuestro sencillo programa de verificación de contraseñas:

if pwd == 'manzana':
    print('Iniciando sesión ...')
else:
    print('Contraseña incorrecta.')

print('¡Todo terminado!')

Las líneas print('Iniciando sesión ...') y print('Contraseña incorrecta') son dos bloques de código separados. Estos resultan tener solo una línea de longitud, pero Python le permite escribir bloques de código que constan de cualquier número de declaraciones.

Para indicar un bloque de código en Python, debes indentar cada línea del bloque en la misma cantidad. Los dos bloques de código en nuestro ejemplo sentencia if están endentados con cuatro espacios que es una cantidad típica de sangría para Python.

En la mayoría de los otros lenguajes de programación, la indentación se usa solo para ayudar a que el código se vea bonito. Pero en Python, es necesario para indicar a qué bloque de código pertenece una declaración. Por ejemplo, la sentencia final print ("¡Todo terminado!") No está endentada, por lo que no es parte del bloque else.

Los programadores familiarizados con otros lenguajes a menudo se irritan ante la idea de que la indentación importa: a muchos programadores les gusta la libertad de formatear su código como les plazca. Sin embargo, las reglas de indentación en Python son bastante simples y la mayoría de los programadores ya utilizan indentación para hacer que su código sea legible. Python simplemente lleva esta idea un paso más allá y le da significado a la sangría.

Sentencia If/elif

Una sentencia if / elif es una sentencia if generalizada con más de una condición. Se utiliza para tomar decisiones complejas. Por ejemplo, supongamos que una aerolínea tiene las siguientes tarifas de billetes para "niños": los niños de 2 años o menos vuelan gratis, los niños mayores de 2 pero menores de 13 pagan una tarifa de niño con descuento y cualquier persona de 13 años o más paga una tarifa de adulto normal. El siguiente programa determina cuánto debe pagar un pasajero:

# pasaje.py
edad = int(input('¿Qué edad tiene usted? '))
if edad <= 2:
    print(' gratis')
elif 2 < edad < 13:
    print(' tarifa de niño)
else:
    print('tarifa para adultos')

Después de que Python obtiene la edad del usuario, ingresa la declaración if / elif y verifica cada condición una tras otra en el orden en que se dan. Entonces, primero verifica si edad es menor a 2, y si es así, indica que el vuelo es libre y salta de la condición elif. Si edad no es menor que 2, entonces verifica la siguiente condición elif para ver si edad está entre 2 y 13. Si es así, muestra el mensaje apropiado y salta de la declaración if / elif. Si ni la condición if ni la condición elif son True, entonces ejecuta el código en el bloque else.

Expresiones condicionales

Python tiene un operador lógico más que le gusta a algunos programadores (¡y a otros no!). Es esencialmente una notación abreviada para declaraciones if que se pueden usar directamente dentro de expresiones. Considera este código:

comida = input("¿Cuál es tu comida favorita? ")
respuesta = 'yuck' if comida == 'cordero' else 'yum'

La expresión en el lado derecho del = en la segunda línea se llama expresión condicional y se evalúa como "yuck" o "cordero". Es equivalente a lo siguiente:

comida = input("¿Cuál es tu comida favorita? ")
if comida == 'cordero':
   respuesta = 'yuck'
else:
   respuesta = 'yum'

Las expresiones condicionales suelen ser más cortas que las correspondientes sentencias if / else, aunque no son tan flexibles o fáciles de leer. En general, deberías utilizarlas cuando simplifiquen tu código.

Documentación oficial Python - Indentación

Traducido del artículo Indentation in Python with Examples