Control de flujo

Hasta ahora hemos programado en Python intrucciones sencillas que solo tenían en cuenta una posibilidad. No evaluábamos nada, simplemente dábamos órdenes y Python obedecía. Como mucho, cuando cometíamos algún error de sintaxis, Python se quejaba, sin más.

A partir de ahora vamos a aprender a manejar el control de flujo. Vamor a tener en cuenta resultados múltiples y vamos a seleccionar uno concreto dependiendo del valor que tengan las variables o de lo que esté ocurriendo en el programa en un momento concreto.

Comparadores

Los elementos más sencillos del control de flujo son los comparadores:

  • Igual a ==.
  • No es igual a !=.
  • Menor que <.
  • Menor o igual que <=.
  • Mayor que >.
  • Mayor o igual que >=.

¡OJO! No confundas el comparador de igualdad == con el símbolo = que utilizamos para asignar valores a variables.

Cuando utilizamos un comparador para comparar dos expresiones, el resultado que nos devuelve la comparación es un valor booleano: True o False.


In [1]:
# asignamos unos cuantos valores a variables
numero1 = 2
numero2 = 34

print(numero1 == numero2)
print(numero1 != numero2)
print(numero1 == numero1)
print(numero2 <= 10)

print(19 >= (10 * numero1))

print("------------------")
print(10 == (5*2))


print(MiVariable != 10)


False
True
True
False
False
------------------
True
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-1-3dee8493c00b> in <module>()
     14 
     15 
---> 16 print(MiVariable != 10)

NameError: name 'MiVariable' is not defined

Condicionales

En Python podemos evaluar condiciones con la intrucción if. if forma lo que se denomina un bloque de código, que tiene una sintaxis particular:

if COMPARACIÓN:
    # si la comparación es True, ejecuta lo siguiente
    INSTRUCCIONES_1


Fíjate bien en dos cosas:

  • los bloques de código comienzan cuando una instrucción termina en dos puntos :
  • el código dentro del bloque aparece indentado o sangrado.

Esta indentación se introduce pulsando el tabulador o tecleando espacios (habitualmente, cuatro espacios). Es muy importante mantener correctamente alineadas las instrucciones que aparecen dentro del mismo bloque de código. De lo contrario, podemos encontrar un error de sintaxis.


In [2]:
nombre = 'Víctor'

if nombre == 'Víctor':
    print('¡Hey! Te llamas igual que yo.')
    
print("Pues muy bien")


¡Hey! Te llamas igual que yo.
Pues muy bien

In [3]:
diadelasemana = 'jueves'

if diadelasemana != 'domingo':
    # hoy no es domingo
    print("No vas a misa")
    
if diadelasemana == 'viernes':
    print("Empieza el fin de semana")

    
print("Esta es la última línea.")


No vas a misa
Esta es la última línea.

In [4]:
if 10 == 5*2:
    print('10 es igual a 5 veces 2')


10 es igual a 5 veces 2

Podemos evaluar condiciones más complejas definiciendo por ejemplo una alternativa cuando el resultado de la comparaciónn era False. Para ello, usamos instrucciones del tipo if-else, con la siguiente sintaxis:

if COMPARACIÓN:
    # si la comparación es True, ejecuta lo siguiente
    INSTRUCCIONES_1
else:
    # por el contrario, si la comparación es False, ejecuta
    INSTRUCCIONES_2

In [5]:
# prueba cambiando el valor asignado a la variable edad
edad = 44

if edad >= 65:
    print('¡Enhorabuena, estás jubilado!')
else:
    print('Deberías estar trabajando, si te dejan.')


Deberías estar trabajando, si te dejan.

Por último, podemos evaluar distintas condiciones con instrucciones del tipo if-elif-else, con la siguiente sintaxis:

if COMPARACIÓN1:
    # si la comparación es True, ejecuta lo siguiente
    INSTRUCCIONES_1
elif COMPARACIÓN2:
    # si esta comparación es True, ejecuta lo siguiente
    INSTRUCCIONES_2
else:
    # por el contrario, si ninguna comparación es True, ejecuta
    INSTRUCCIONES_3

Piensa en elif como en una abreviatura de else + if.


In [6]:
# prueba varias ejecuciones de esta celda cambiando el valor asignado a la variable temperatura
temperatura = 22

if temperatura <= 0: 
    print('¡Está helando!')
elif 1 <= temperatura <= 10:
    print('¡Hace frescuni!')
elif 11 <= temperatura <= 25:
    print('¡Ya es primavera!')
else:
    print('¡Buff, qué calor!')


¡Ya es primavera!

Operadores lógicos (o booleanos)

Los operadores lógicos son palabras usadas para conectar oraciones de Python de forma gramaticalmente correcta, casi igual que si lo hiciésamos en lenguaje natural. Existen tres operadores lógicos:

  • la conjunción and:
  • la disyunción or.
  • la negación not.

Al igual que con las comparaciones, los operadores lógicos generan valores booleanos: True o False.


In [7]:
nombre = 'Víctor'
edad = 37

if nombre == 'Víctor' and edad == 38:
    print('¡Hey! ¡Eres yo! ¿Quién te envía?')
elif nombre == 'Víctor' or edad == 38:
    print('Te pareces a mí en algo.')
if not nombre == 'Víctor' and not edad == 38: # esto es equivalente a if nombre != "Víctor" and edad != 34:
    print('No tienes nada que ver conmigo')


Te pareces a mí en algo.

In [8]:
alumnos = ["Pepito", "Raul", "Ana", "Antonio", "Maria"]
print(alumnos)


['Pepito', 'Raul', 'Ana', 'Antonio', 'Maria']

In [9]:
if 'Paco' in alumnos and 'Ana' in alumnos:
    print('Paco y Ana están en clase.')
else:
    print('No es cierto que Paco y Ana estén en clase')


No es cierto que Paco y Ana estén en clase

In [10]:
if "Paco" in alumnos or "Ana" in alumnos:
    print('Paco o Ana, uno de los dos o ambos, está en clase.')
else:
    print('No ha venido ninguno')


Paco o Ana, uno de los dos o ambos, está en clase.

A continuación, hay más ejemplos de evaluación de condiciones con bloques de código if con dudas que surgen en clase. Pactica para entender cómo funcionan.


In [11]:
alumnos = ["Pepito", "Raul", "Ana", "Antonio", "Maria"]
hoy = "viernes"

if "Pepito" in alumnos:
    print("Pepito está en clase")
    
if "Ana" in alumnos:
    print("Ana está en clase")

if "Pepito" in alumnos and "Ana" not in alumnos and hoy == "viernes":
    print("Pepito ha venido, pero Ana no. Menos mal que es viernes")
    
if "Pepito" in alumnos and "Ana" not in alumnos:
    print("Pepito ha venido, pero Ana no")

if hoy == "viernes":
    print("Menos mal que es viernes")


Pepito está en clase
Ana está en clase
Menos mal que es viernes

In [12]:
alumnos = 'Pepito Raul Ana Antonio Maria'.split()
print(alumnos)

numeros = "1 2 3 4 5 6 7 8 9 10".split()
print(numeros)
print(int(numeros[0]) + int(numeros[-1]))


['Pepito', 'Raul', 'Ana', 'Antonio', 'Maria']
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
11

In [13]:
# algunos ejemplos para distinguir el funcionamiento de == y de in
palabras_minusculas = "hola casa amigo wertyj"
palabras_mayusculas = "AMIGO VIERNES CAFÉ"

print("casa" in palabras_minusculas)
print("O V" in palabras_mayusculas)

print("amigo" in "amigo")
print("amigo" == "amigo")

print("amigo" in "amigos")
print("amigo" == "amigos")


True
True
True
True
True
False