Estructuras de control#
If, For, While
Un código es una secuencia de instrucciones, que por norma general son ejecutadas una tras otra. Podemos verlo como una receta de cocina, en la que tenemos unos pasos a seguir. Empezamos por el principio, vamos realizando cada tarea, y una vez hemos llegado al final, hemos terminado. Nuestra receta en código podría ser la siguiente:
poner_agua_hervir()
echar_arroz_hervir()
cortar_pollo()
freir_pollo()
mezclar_pollo_arroz()
Sin embargo, en muchas ocasiones no basta con ejecutar las instrucciones una tras otra desde el principio hasta llegar al final.
Puede ser que ciertas instrucciones se tengan que ejecutar si y sólo si se cumple una determinada condición. ¿Que pasa si nuestro comensal es vegetariano? No hay problema, podemos usar el condicional if. Si no es vegetariano usamos pollo, de lo contrario zanahoria.
poner_agua_hervir()
echar_arroz_hervir()
if not vegetariano:
cortar_pollo()
freir_pollo()
mezclar_pollo_arroz()
else:
cortar_zanahoria()
freir_zanahoria()
mezclar_zanahoria_arroz()
Por otro lado, la receta que teníamos era para una persona. ¿Qué pasa si queremos cocinar para 3? ¿Tenemos que escribir el código repetido 3 veces?
# Cocinamos para la primera persona
poner_agua_hervir()
echar_arroz_hervir()
cortar_pollo()
freir_pollo()
mezclar_pollo_arroz()
# Volvemos a cocinar para la segunda
poner_agua_hervir()
echar_arroz_hervir()
cortar_pollo()
freir_pollo()
mezclar_pollo_arroz()
# Y para la tercera
- poner_agua_hervir()
- echar_arroz_hervir()
- cortar_pollo()
- freir_pollo()
- mezclar_pollo_arroz()
Pero ¿y si queremos para 100? Te puedes ya imaginar que repetir el código tantas veces no parece ser la mejor idea. Es aquí donde entran en juego el for y el while.
Estas estructuras de control nos permiten repetir un determinado bloque de código tantas veces como queramos.
for i in range(100):
Cocinamos la receta
poner_agua_hervir()
echar_arroz_hervir()
cortar_pollo()
freir_pollo()
mezclar_pollo_arroz()
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)
2.0
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á despues de la condicion. 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)
3.0
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() “Fuera if” será ejecutado siempre, ya que está fuera del bloque if.
if b != 0:
c = a/b
print("Dentro if")
print("Fuera if")
Dentro if
Fuera if
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("A es mayor que 5 y menor que 15")
A es mayor que 5 y menor 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.
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:
Cell In[5], line 1
if a > 5:
^
SyntaxError: incomplete input
if a > 5:
pass
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 = 6
if x == 5:
print("Es 5")
else:
print("No es 5")
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 = 6
if x == 5:
print("Es 5")
elif x == 6:
print("Es 6")
elif x == 7:
print("Es 7")
Es 6
Con 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 = 100
if x == 5:
print("Es 5")
elif x == 6:
print("Es 6")
elif x == 7:
print("Es 7")
else:
print("Es otro")
Es otro
# Verifica si un número es par o impar
x = 6
if not x%2:
print("Es par")
else:
print("Es impar")
Es par
# Decrementa x en 1 unidad si es mayor que cero
x = -6
x-=1 if x>0 else x
print(x)
0
Ejercicio::#
Hacer un programa que permita saber si un año es bisiesto. Para que un año sea bisiesto debe ser divisible por 4 y no debe ser divisible por 100, excepto que también sea divisible por 400.:
Estructura de control For#
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)
0
1
2
3
4
otro ejemplo de iteracion
for i in "Python":
print(i)
P
y
t
h
o
n
number = 10
for i in number:
print(number)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-3-07ea90a6a91e> in <cell line: 2>()
1 number = 10
----> 2 for i in number:
3 print(number)
TypeError: 'int' object is not iterable
Observamos que nos arroja error ya que la variable number esta definida como un entero el cual no es iterable pues tiene un solo valor.
For anidados#
Es posible anidar los for, es decir, meter uno dentro de otro. Esto puede ser muy útil si queremos iterar algún objeto que en cada elemento, tiene a su vez otra clase iterable. Podemos tener por ejemplo, una lista de listas, una especie de matriz.
Si queremos acceder a cada elemento individualmente, podemos anidar dos for. Uno de ellos se encargará de iterar las columnas y el otro las filas.
lista = [[56, 34, 1],
[12, 4, 5],
[9, 4, 3]]
for i in lista:
print(i)
[56, 34, 1]
[12, 4, 5]
[9, 4, 3]
for i in lista:
for j in i:
print(j)
56
34
1
12
4
5
9
4
3
Ejemplos#
Iterando cadena al revés. Haciendo uso de [::-1] se puede iterar la lista desde el último al primer elemento.
texto = "Python"
for i in texto[::-1]:
print(i)
n
o
h
t
y
P
Itera la cadena saltándose elementos. Con [::2] vamos tomando un elemento si y otro no.
texto = "Python"
for i in texto[::2]:
print(i)
P
t
o
Suma los numeros del 1 al 10
print(sum(i for i in range(101)))
5050
Uso del range#
Uno de las iteraciones mas comunes que se realizan, es la de iterar un número entre por ejemplo 0 y n. Si ya programas, estoy seguro de que estas cansado de escribir esto, aunque sea en otro lenguaje. Pongamos que queremos iterar una variable i de 0 a 5. Haciendo uso de lo que hemos visto anteriormente, podríamos hacer lo siguiente.
Se trata de una solución que cumple con nuestro requisito. El contenido después del in se trata de una clase que como ya hemos visto antes, es iterable, y es de hecho una tupla. Sin embargo, hay otras formas de hacer esto en Python, haciendo uso del range().
for i in (0, 1, 2, 3, 4, 5):
print(i)
0
1
2
3
4
5
for i in range(6):
print(i)
0
1
2
3
4
5
El range() genera una secuencia de números que van desde 0 por defecto hasta el número que se pasa como parámetro menos 1. En realidad, se pueden pasar hasta tres parámetros separados por coma, donde el primer es el inicio de la secuencia, el segundo el final y el tercero el salto que se desea entre números. Por defecto se empieza en 0 y el salto es de 1.
#range(inicio, fin, salto)
print(list(range(5, 20, 1)))
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
for i in range(5, 20, 2):
print(i)
5
7
9
11
13
15
17
19
for i in range (5, 0, -1):
print(i)
5
4
3
2
1
Ejercicio:#
Escribir un programa que pida al usuario un número entero positivo y muestre por pantalla todos los números impares desde 1 hasta ese número separados por comas.
n = int(input("Introduce un número entero positivo: "))
for i in range(1, n+1, 2):
print(i, end=", ")
Introduce un número entero positivo: 60
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39, 41, 43, 45, 47, 49, 51, 53, 55, 57, 59,
Estructura de control 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)
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.
x = 5
while x > 0:
x -=1
print(x) #4,3,2,1,0
else:
print("El bucle ha finalizado")
4
3
2
1
0
El bucle ha finalizado
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")
4
3
2
1
0
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.
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.
# Permutación a generar
i = 0
j = 0
while i < 3:
while j < 3:
print(i,j)
j += 1
i += 1
j = 0
0 0
0 1
0 2
1 0
1 1
1 2
2 0
2 1
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
0 0 0
0 1 1
0 2 2
1 0 0
1 1 1
1 2 2
2 0 0
2 1 1
2 2 2
Ejemplos de 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 = 9
x = 3
while z > 0:
print(' ' * z + '*' * x + ' ' * z)
x+=2
z-=1
***
*****
*******
*********
***********
*************
***************
*****************
*******************
serie de fibonacci
a, b = 0, 1
while b < 100:
print(b)
a, b = b, a + b
#1, 1, 2, 3, 5, 8, 13, 21
1
1
2
3
5
8
13
21
34
55
89
Ejercicio#
Escribir un programa que almacene la cadena de caracteres contraseña en una variable, pregunte al usuario por la contraseña hasta que introduzca la contraseña correcta.
key = "hola"
password =""
while password != key:
password = input("Introduce la contraseña: ")
print("Contraseña correcta")
Introduce la contraseña: contraseña
Introduce la contraseña: nada
Introduce la contraseña: hola
Contraseña correcta
⭐ Reto ⭐#
0️⃣ Escribe un programa en Python que dibuje un cuadrado en la consola utilizando el carácter *. El programa debe pedir al usuario que ingrese el tamaño del cuadrado (un número entero positivo) y luego debe dibujar el cuadrado de ese tamaño en la consola.
Por ejemplo si el usuario ingresa 4 la salida debe ser:
"""
salida del programa para tamaño 4
****
****
****
****
"""
# Pista
print("#" * 4)
####
# Solicitar al usuario que ingrese el tamaño del cuadrado
# Asegurarse de convertir la entrada a un número entero
# Dibujar el cuadrado según el tamaño
1️⃣ Modifica el programa para que solo se dibujen los bordes del cuadrado
Pista: en que filas están completamente llenas y cuales no?
"""
salida del programa para tamaño 4
****
* *
* *
****
"""
# escribe el nuevo código aqui
2️⃣ Ahora escribe un codigo para que el cuadrado tenga en la diagonal el caracter X como se muestra en el ejemplo
Pista: ¿Cómo sabemos cuando la posición se encuentra en la diagonal?
"""
salida del programa para tamaño 4
X***
*X**
**X*
***X
"""
# Escribe el nuevo código aqui
Super reto 🤓 🚀#
Escribe un programa en Python que dibuje una cara sonriente en la consola usando caracteres como *, -, |, O, etc. La cara debe tener ojos, una nariz y una boca sonriente.
Solicita al usuario el ancho de la cara, ten en cuenta:
El tamaño debe ser un número entero que represente el ancho de la cara (debe ser impar para mantener la simetría).
Usa bucles for y if para controlar dónde se colocan los caracteres para formar la cara. (por ejemplo la nariz está en la mitad)
Imprime la cara completa en la consola.
"""
salida del programa:
*****
* *
* O O *
* | *
* --- *
*****
"""
# tu codigo aqui
# Solicitar al usuario el tamaño de la cara
# Validar el tamaño ingresado
# Calcular posición de ojos,nariz y boca
# Dibujar la cara
Puedes modificar tu codigo, permite al usuario elegir entre diferentes tipos de caras (triste, feliz, enojada) cambiando la forma de la boca o los ojos.