Link Search Menu Expand Document

Condicional en Python

De no ser por las estructuras de control, el c贸digo en cualquier lenguaje de programaci贸n ser铆a ejecutado secuencialmente hasta terminar. Un c贸digo, no deja de ser un conjunto de instrucciones que son ejecutadas unas tras otra. Gracias a las estructuras de control, podemos cambiar el flujo de ejecuci贸n de un programa, haciendo que ciertos bloques de c贸digo se ejecuten si y solo si se dan unas condiciones particulares.

Uso del if

Un ejemplo ser铆a si tenemos dos valores a y b que queremos dividir. Antes de entrar en el bloque de c贸digo que divide a/b, ser铆a importante verificar que b es distinto de cero, ya que la divisi贸n por cero no est谩 definida. Es aqu铆 donde entran los condicionales if.

a = 4
b = 2
if b != 0:
    print(a/b)

En este ejemplo podemos ver como se puede usar un if en Python. Con el operador != se comprueba que el n煤mero b sea distinto de cero, y si lo es, se ejecuta el c贸digo que est谩 identado. Por lo tanto un if tiene dos partes:

  • La condici贸n que se tiene que cumplir para que el bloque de c贸digo se ejecute, en nuestro caso b!=0.
  • El bloque de c贸digo que se ejecutar谩 si se cumple la condici贸n anterior.

Es muy importante tener en cuenta que la sentencia if debe ir terminada por : y el bloque de c贸digo a ejecutar debe estar identado. Si usas alg煤n editor de c贸digo, seguramente la identaci贸n se producir谩 autom谩ticamente al presionar enter. N贸tese que el bloque de c贸digo puede tambi茅n contener m谩s de una l铆nea, es decir puede contener m谩s de una instrucci贸n.

if b != 0:
    c = a/b
    d = c + 1
    print(d)

Todo lo que vaya despu茅s del if y est茅 identado, ser谩 parte del bloque de c贸digo que se ejecutar谩 si la condici贸n se cumple. Por lo tanto el segundo print() 鈥淔uera if鈥 ser谩 ejecutado siempre, ya que est谩 fuera del bloque if.

if b != 0:
    c = a/b
    print("Dentro if")
print("Fuera if")

Existen otros operadores que se ver谩n en otros cap铆tulos, como el de comparar si un n煤mero es mayor que otro. Su uso es igual que el anterior.

if b > 0:
    print(a/b)

Se puede tambi茅n combinar varias condiciones entre el if y los :. Por ejemplo, se puede requerir que un n煤mero sea mayor que 5 y adem谩s menor que 15. Tenemos en realidad tres operadores usados conjuntamente, que ser谩n evaluados por separado hasta devolver el resultado final, que ser谩 True si la condici贸n se cumple o False de lo contrario.

a = 10
if a > 5 and a < 15:
    print("Mayor que 5 y menos que 15")

Es muy importante tener en cuenta que a diferencia de en otros lenguajes, en Python no puede haber un bloque if vac铆o. El siguiente c贸digo dar铆a un SyntaxError.

if a > 5:

Por lo tanto si tenemos un if sin contenido, tal vez porque sea una tarea pendiente que estamos dejando para implementar en un futuro, es necesario hacer uso de pass para evitar el error. Realmente pass no hace nada, simplemente es para tener contento al interprete de c贸digo.

if a > 5:
    pass

Algo no demasiado recomendable pero que es posible, es poner todo el bloque que va dentro del if en la misma l铆nea, justo a continuaci贸n de los :. Si el bloque de c贸digo no es muy largo, puede ser 煤til para ahorrarse alguna l铆nea de c贸digo.

if a > 5: print("Es > 5")

Si tu bloque de c贸digo tiene m谩s de una l铆nea, se pueden poner tambi茅n en la misma l铆nea separ谩ndolas con ;.

if a > 5: print("Es > 5"); print("Dentro del if")

Uso de else y elif

Es posible que no solo queramos hacer algo si una determinada condici贸n se cumple, sino que adem谩s queramos hacer algo de lo contrario. Es aqu铆 donde entra la cl谩usula else. La parte del if se comporta de la manera que ya hemos explicado, con la diferencia que si esa condici贸n no se cumple, se ejecutar谩 el c贸digo presente dentro del else. N贸tese que ambos bloque de c贸digo son excluyentes, se entra o en uno o en otro, pero nunca se ejecutar谩n los dos.

x = 5
if x == 5:
    print("Es 5")
else:
    print("No es 5")

Hasta ahora hemos visto como ejecutar un bloque de c贸digo si se cumple una instrucci贸n, u otro si no se cumple, pero no es suficiente. En muchos casos, podemos tener varias condiciones diferentes y para cada una queremos un c贸digo distinto. Es aqu铆 donde entra en juego el elif.

x = 5
if x == 5:
    print("Es 5")
elif x == 6:
    print("Es 6")
elif x == 7:
    print("Es 7")

Con la cl谩usula elif podemos ejecutar tantos bloques de c贸digo distintos como queramos seg煤n la condici贸n. Traducido al lenguaje natural, ser铆a algo as铆 como decir: si es igual a 5 haz esto, si es igual a 6 haz lo otro, si es igual a 7 haz lo otro.

Se puede usar tambi茅n de manera conjunta todo, el if con el elif y un else al final. Es muy importante notar que if y else solamente puede haber uno, mientras que elif puede haber varios.

x = 5
if x == 5:
    print("Es 5")
elif x == 6:
    print("Es 6")
elif x == 7:
    print("Es 7")
else:
    print("Es otro")

Si vienes de otros lenguajes de programaci贸n, sabr谩s que el switch es una forma alternativa de elif, sin embargo en Python esta cl谩usula no existe.

Operador ternario

El operador ternario o ternary operator es una herramienta muy potente que muchos lenguajes de programaci贸n tienen. En Python es un poco distinto a lo que ser铆a en C, pero el concepto es el mismo. Se trata de una cl谩usula if, else que se define en una sola l铆nea y puede ser usado por ejemplo, dentro de un print().

Para saber m谩s: El operador ternario fue propuesto en la PEP 308.

x = 5
print("Es 5" if x == 5 else "No es 5")
#Es 5

Existen tres partes en un operador ternario, que son exactamente iguales a los que hab铆a en un if else. Tenemos la condici贸n a evaluar, el c贸digo que se ejecuta si se cumple, y el c贸digo que se ejecuta si no se cumple. En este caso, tenemos los tres en la misma l铆nea.

# [c贸digo si se cumple] if [condici贸n] else [c贸digo si no se cumple]

Es muy 煤til y permite ahorrarse algunas l铆neas de c贸digo, adem谩s de aumentar la rapidez a la que escribimos. Si por ejemplo tenemos una variable a la que queremos asignar un valor en funci贸n de una condici贸n, se puede hacer de la siguiente manera. Siguiendo el ejemplo anterior, en el siguiente c贸digo intentamos dividir a entre b. Si b es diferente a cero, se realiza la divisi贸n y se almacena en c, de lo contrario se almacena -1. Ese -1 podr铆a ser una forma de indicar que ha habido un error con la divisi贸n.

a = 10
b = 5
c = a/b if b!=0 else -1
print(c)
#2

Ejemplos if

# Verifica si un n煤mero es par o impar
x = 6
if not x%2:
    print("Es par")
else:
    print("Es impar")
# Decrementa x en 1 unidad si es mayor que cero
x = 5
x-=1 if x>0 else x
print(x)