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.
Los elementos más sencillos del control de flujo son los comparadores:
==
.!=
.<
.<=
.>
.>=
.¡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)
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:
:
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")
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.")
In [4]:
if 10 == 5*2:
print('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.')
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!')
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:
and
: or
.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')
In [8]:
alumnos = ["Pepito", "Raul", "Ana", "Antonio", "Maria"]
print(alumnos)
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')
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')
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")
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]))
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")