CONOCIENDO PYTHON
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á
indentado. 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 indentado. Si usas algún editor de código, seguramente la
indentació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é indentado, será parte del bloque de código que se
ejecutará si la condición se cumple. Por lo tanto el segundo print() “Fuera 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 x % 2 == 0:
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)
Bucles while
Anteriormente hemos visto el uso del if y el for para modificar el flujo de ejecución del
código. A continuación vemos otra forma de hacerlo con el while.
While
El uso del while nos permite ejecutar una sección de código repetidas veces, de ahí su
nombre. El código se ejecutará mientras una condición determinada se cumpla. Cuando
se deje de cumplir, se saldrá del bucle y se continuará la ejecución normal.
Llamaremos iteración a una ejecución completa del bloque de código.
Cabe destacar que existe dos tipos de bucles, los que tienen un número de iteraciones no
definidas, y los que tienen un número de iteraciones definidas. El while estaría dentro del
primer tipo. Mas adelante veremos los for, que se engloban en el segundo.
x=5
while x > 0:
x -=1
print(x)
# Salida: 4,3,2,1,0
En el ejemplo anterior tenemos un caso sencillo de while. Tenemos una condición x>0 y un
bloque de código a ejecutar mientras dure esa condición x-=1 y print(x). Por lo tanto
mientras que x sea mayor que 0, se ejecutará el código. Una vez se llega al final, se vuelve
a empezar y si la condición se cumple, se ejecuta otra vez. En este caso se entra al bloque
de código 5 veces, hasta que en la sexta, x vale cero y por lo tanto la condición ya no se
cumple. Por lo tanto el while tiene dos partes:
• La condición que se tiene que cumplir para que se ejecute el código.
• El bloque de código que se ejecutará mientras la condición se cumpla.
Ten cuidado ya que un mal uso del while puede dar lugar a bucles infinitos y problemas.
Cierto es que en algún caso tal vez nos interese tener un bucle infinito, pero salvo que
estemos seguros de lo que estamos haciendo, hay que tener cuidado. Imaginemos que
tenemos un bucle cuya condición siempre se cumple. Por ejemplo, si ponemos True en la
condición del while, siempre que se evalúe esa expresión, el resultado será True y se
ejecutará el bloque de código. Una vez llegado al final del bloque, se volverá a evaluar la
condición, se cumplirá, y vuelta a empezar. No te recomiendo que ejecutes el siguiente
código, pero puedes intentarlo.
# No ejecutes esto, en serio
while True:
print("Bucle infinito")
Es posible tener un while en una sola línea, algo muy útil si el bloque que queremos
ejecutar es corto. En el caso de tener mas de una sentencia, las debemos separar con ;.
x=5
while x > 0: x-=1; print(x)
También podemos usar otro tipo de operación dentro del while, como la que se muestra a
continuación. En este caso tenemos una lista que mientras no este vacía, vamos
eliminando su primer elemento.
x = ["Uno", "Dos", "Tres"]
while x:
[Link](0)
print(x)
#['Dos', 'Tres']
#['Tres']
#[]
Else y while
Algo no muy corriente en otros lenguajes de programación pero si en Python, es el uso de
la cláusula else al final del while. Podemos ver el ejemplo anterior mezclado con el else. La
sección de código que se encuentra dentro del else, se ejecutará cuando el bucle termine,
pero solo si lo hace “por razones naturales”. Es decir, si el bucle termina porque la
condición se deja de cumplir, y no porque se ha hecho uso del break.
x=5
while x > 0:
x -=1
print(x) #4,3,2,1,0
else:
print("El bucle ha finalizado")
Podemos ver como si el bucle termina por el break, el print() no se ejecutará. Por lo tanto,
se podría decir que si no hay realmente ninguna sentencia break dentro del bucle, tal vez
no tenga mucho sentido el uso del else, ya que un bloque de código fuera del bucle
cumplirá con la misma funcionalidad.
x=5
while True:
x -= 1
print(x) #4, 3, 2, 1, 0
if x == 0:
break
else:
# El print no se ejecuta
print("Fin del bucle")
Bucles anidados
Ya hemos visto que los bucles while tienen una condición a evaluar y un bloque de código
a ejecutar. Hemos visto ejemplos donde el bloque de código son operaciones sencillas
como la resta -, pero podemos complicar un poco mas las cosas y meter otro
bucle while dentro del primero. Es algo que resulta especialmente útil si por ejemplo
queremos generar permutaciones de números, es decir, si queremos generar todas las
combinaciones posibles. Imaginemos que queremos generar todas las combinaciones de
de dos números hasta 2. Es decir, 0-0, 0-1, 0-2,… hasta 2-2.
# Permutación a generar
i=0
j=0
while i < 3:
while j < 3:
print(i,j)
j += 1
i += 1
j=0
Vamos a analizara el ejemplo paso por paso. El primer bucle genera números del 0 al 2, lo
que corresponde a la variable i. Por otro lado el segundo bucle genera también número del
0 al 2, almacenados en la variable j. Al tener un bucle dentro de otro, lo que pasa es que por
cada i se generan 3 j. Muy importante no olvidar que al finalizar el bucle de la j, debemos
resetear j=0 para que en la siguiente iteración la condición de entrada se cumpla.
Podemos complicar las cosas aún más y tener tres bucles anidados, generando
combinaciones de 3 elementos con número 0, 1, 2. En este caso tendremos desde 0,0,0
hasta 2,2,2.
i, j, k = 0, 0, 0
while i < 3:
while j < 3:
while k < 3:
print(i,j,k)
k += 1
j += 1
k=0
i += 1
j=0
Ejemplos while
Árbol de navidad en Python. Imprime un árbol de navidad formado con * haciendo uso
del while y de la multiplicación de un entero por una cadena, cuyo resultado en Python es
replicar la cadena.
z=7
x=1
while z > 0:
print(' ' * z + '*' * x + ' ' * z)
x+=2
z-=1
# *
# ***
# *****
# *******
# *********
# ***********
Aunque esta no sea tal vez la mejor forma de iterar una cadena es un buen ejemplo para el
uso del while e introducir el indexado de listas con [], que veremos en otros capítulos.
text = "Python"
i=0
while i < len(text):
print(text[:i + 1])
i += 1
#P
# Py
# Pyt
# Pyth
# Pytho
# Python
Sucesión de Fibonacci en Python. En matemáticas, la sucesión de fibonacci es una
sucesión infinita de números naturales, donde el siguiente es calculado sumando los dos
anteriores.
a, b = 0, 1
while b < 25:
print(b)
a, b = b, a + b
#1, 1, 2, 3, 5, 8, 13, 21
Bucle for
A continuación explicaremos el bucle for y sus particularidades en Python, que comparado
con otros lenguajes de comparación, tiene ciertas diferencias.
El for es un tipo de bucle, parecido al while pero con ciertas diferencias. La principal es que
el número de iteraciones de un for esta definido de antemano, mientras que en un while
no. La diferencia principal con respecto al while es en la condición. Mientras que en el while
la condición era evaluada en cada iteración para decidir si volver a ejecutar o no el código,
en el for no existe tal condición, sino un iterable que define las veces que se ejecutará el
código. En el siguiente ejemplo vemos un bucle for que se ejecuta 5 veces, y donde
la i incrementa su valor “automáticamente” en 1 en cada iteración.
for i in range(0, 5):
print(i)
# Salida:
#0
#1
#2
#3
#4
Si has leído el capítulo del while, tal vez ya empieces a ver ventajas en el uso del for. Si por
ejemplo, queremos tener un número que va creciendo de 0 a n, hacerlo con for nos ahorra
alguna línea de código, porque no tenemos que escribir código para incrementar el número.
En Python se puede iterar prácticamente todo, como por ejemplo una cadena. En el
siguiente ejemplo vemos como la i va tomando los valores de cada letra. Mas adelante
explicaremos que es esto de los iterables e iteradores.
for i in "Python":
print(i)
# Salida:
#P
#y
#t
#h
#o
#n