05 Python - Ciclo For
05 Python - Ciclo For
A diferencia de las estructuras de control condicionales, las iterativas (también llamadas cíclicas o bucles), nos permiten
ejecutar un mismo código, de manera repetida, mientras se cumpla una condición.
En Python se dispone de dos estructuras cíclicas:
• El bucle for
• El bucle while
Muchas veces, para controlar estos bucles se utilizan secuencias denominadas range(). En Python3 se considera al
elemento range() como otro tipo de datos, al igual que las tuplas, listas y diccionarios, en Python2 se la considera una
función.
El tipo range()
Inmutable significa que, a diferencia de las listas, los range() no se pueden modificar.
Una sucesión artimética es una sucesión en la que la diferencia entre dos términos consecutivos es siempre la
misma.
Un range se crea llamando al tipo de datos con uno, dos o tres argumentos numéricos, como si fuera una función.
- El tipo range() con un único argumento se escribe range(n) y crea una lista inmutable de n números enteros
consecutivos que empieza en 0 y acaba en n - 1.
Para ver los valores del range(), se puede imprimir por pantalla
x = range(10)
print (list(x)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
- El tipo range() con dos argumentos se escribe range(m, n) y crea una lista inmutable de enteros consecutivos que
empieza en m y acaba en n - 1
lala = range(-5, 1)
print (list (lala)) [-5, -4, -3, -2, -1, 0]
print (list (range(5, 21, 3))) [5, 8, 11, 14, 17, 20]
print (list (range(10, 0, -2))) [10, 8, 6, 4, 2]
Si p es positivo y n menor o igual que m, o si p es negativo y n mayor o igual que m, se crea un range vacío.
En los range( m, n, p), se pueden escribir p range distintos que generan el mismo resultado. Por ejemplo:
Si se escriben sólo dos argumentos, Python le asigna a p el valor 1. Es decir range(m, n) es lo mismo que range(m, n, 1)
Si se escribe sólo un argumento, Python, le asigna a m el valor 0 y a p el valor 1. Es decir range(n) es lo mismo
que range(0, n, 1)
El tipo range() sólo admite argumentos enteros.
Bucle for
Un bucle for es un bucle que repite el bloque de instrucciones un número predeterminado de veces. El bloque de
instrucciones que se repite se suele llamar cuerpo del bucle y cada repetición se suele llamar iteración.
print("Comienzo") Comienzo
for i in [0, 1, 2]: Hola Hola Hola
print("Hola ", end="")
print() Final
print("Final")
En el ejemplo anterior, los valores que toma la variable no son importantes, lo que importa es que la lista tiene tres
elementos y por tanto el bucle se ejecuta tres veces. El siguiente programa produciría el mismo resultado que el anterior:
Ejemplo 2
En los ejemplos anteriores, la variable de control "i" no se utilizaba en el bloque de instrucciones, pero en muchos casos
sí que se utiliza. Cuando se utiliza, hay que tener en cuenta que la variable de control va tomando los valores del elemento
recorrible. Por ejemplo:
print ("Comienzo")
for i in [3, 4, 5]:
print ("Hola. Ahora i vale ", i ," y su cuadrado " , i ** 2)
print ("Esto es todo, amigos")
Comienzo
Hola. Ahora i vale 3 y su cuadrado 9
Hola. Ahora i vale 4 y su cuadrado 16
Hola. Ahora i vale 5 y su cuadrado 25
Esto es todo amigos
Ejemplo 3
La lista puede contener cualquier tipo de elementos, no sólo números. El bucle se repetirá siempre tantas veces como
elementos tenga la lista y la variable irá tomando los valores de uno en uno. Por ejemplo:
print ("Comienzo") Comienzo
for i in ["Alba", "Benito", 27]: Hola. Ahora i vale Alba
print ("Hola. Ahora i vale ", i) Hola. Ahora i vale Benito
print ("Final" ) Hola. Ahora i vale 27
Final
La costumbre más extendida es utilizar la letra i como nombre de la variable de control, pero se puede utilizar cualquier
otro nombre válido.
Ejemplo 4
También en vez de una lista se puede escribir una cadena, en cuyo caso la variable de control va tomando como valor
cada uno de los caracteres:
for casa in "AMIGO": Dame una A
print ("Dame una ", casa) Dame una M
print ("¡AMIGO!" ) Dame una I
Dame una G
Dame una O
¡AMIGO!
Ejemplo 5
En los ejemplos anteriores se ha utilizado una lista para facilitar la comprensión del funcionamiento de los bucles pero, si
es posible hacerlo, se recomienda utilizar tipos range(), entre otros motivos porque durante la ejecución del programa
ocupan menos memoria en el ordenador.
El siguiente programa es equivalente al programa del ejemplo 1:
Print ("Comienzo") Comienzo
for i in range(3): Hola Hola Hola
print ("Hola ", end="")
print() Final
print ("Final")
Otra de las ventajas de utilizar tipos range() es que el argumento del tipo range() controla el número de veces que se
ejecuta el bucle.
En el ejemplo anterior basta cambiar el argumento para que el programa salude muchas más veces.
Print ("Comienzo") Comienzo
for i in range(10): Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola
print ("Hola ", end="")
print() Final
print ("Final")
Esto permite que el número de iteraciones dependa del desarrollo del programa. En el ejemplo siguiente es el usuario
quien decide cuántas veces se ejecuta el bucle:
Contadores y acumuladores
En muchos programas se necesitan variables que cuenten cuántas veces ha ocurrido algo (contadores) o que acumulen
valores (acumuladores). Las situaciones pueden ser muy diversas, por lo que simplemente hay aquí un par de ejemplos
para mostrar la idea.
Contador
Se entiende por contador una variable que lleva la cuenta del número de veces que se ha cumplido una condición. El
ejemplo siguiente es un ejemplo de programa con contador (en este caso, la variable que hace de contador es la
variable cuenta):
Ejemplo de contador
print ("Comienzo")
cuenta = 0
for i in range(1, 6):
if i % 2 == 0:
cuenta = cuenta + 1
print ("Desde 1 hasta 5 hay ", cuenta, " múltiplos de 2")
Comienzo
Desde 1 hasta 5 hay 2 múltiplos de 2
Detalles importantes:
Acumulador
Se entiende por acumulador una variable que acumula el resultado de una operación. El ejemplo siguiente es
un ejemplo de programa con acumulador (en este caso, la variable que hace de acumulador es la
variable suma):
2do Trimestre - Guia 05 – pág 5
2do Trimestre – guía 05: Python - Profesora Mariángeles Glavina 4ºB
Ejemplo de acumulador
print ("Comienzo")
suma = 0
for i in [1, 2, 3, 4]:
suma = suma + i
print ("La suma de los números de 1 a 4 es ", suma)
Comienzo
La suma de los números de 1 a 4 es 10
Detalles importantes:
El acumulador se modifica en cada iteración del bucle (en este caso, el valor de i se añade al acumulador suma).
Antes del bucle se debe dar un valor inicial al acumulador (en este caso, 0)
Bucles anidados
Se habla de bucles anidados cuando un bucle se encuentra en el bloque de instrucciones de otro bloque.
Al bucle que se encuentra dentro del otro se le puede denominar bucle interior o bucle interno. El otro bucle sería el
bucle exterior o bucle externo.
Los bucles pueden tener cualquier nivel de anidamiento (un bucle dentro de otro bucle dentro de un tercero, etc.).
Los nombres de las variables de control de los bucles anidados no deben coincidir, para evitar ambigüedades.
En el ejemplo anterior se han utilizado listas para facilitar la comprensión del funcionamiento del bucle pero, si es
posible hacerlo, se recomienda utilizar tipos range(), entre otros motivos porque durante la ejecución del programa
ocupan menos memoria en el ordenador y se pueden hacer depender del desarrollo del programa.
El siguiente programa es equivalente al ejemplo anterior:
for i in range(3):
for j in range(2):
print ("i vale " , i , " y j vale " , j)
Al escribir bucles anidados, hay que prestar atención a la indentación de las instrucciones, ya que esa indentación indica
a Python si una instrucción forma parte de un bloque u otro. En los tres siguientes programas la única diferencia es la
indentación de la última instrucción:
Ejemplo de indentación en bucle anidado (1)
for i in [1, 2, 3]:
for j in [11, 12]:
print (j, end="")
print (i, end="")
11 1 12 1 11 2 12 2 11 3 12 3
Valor de i Valor de j Muestra
1 11 11 1
12 12 1
2 11 11 2
12 12 2
3 11 11 3
12 12 3
En este caso, la última instrucción forma parte del cuerpo del bucle interno. Por tanto el valor de i se escribe cada vez
que se ejecuta el bucle interno.
En este caso, la última instrucción forma parte del cuerpo del bucle externo, pero no del interno. Por tanto el valor de i
se escribe cada vez que se ha terminado de ejecutar el bucle interno.
En este caso, la última instrucción no forma parte de ningún bucle. Por tanto el valor de i se escribe una sola vez, al
terminarse de ejecutar el bucle externo.
En el ejemplo anterior, el bucle externo (el controlado por i) se ejecuta 3 veces y el bucle interno (el controlado por j) se
ejecuta 1, 2 y 3 veces. Por ello la instrucción print() se ejecuta en total 6 veces.
La variable i toma los valores de 1 a 3 y la variable j toma los valores de 0 a i, por lo que cada vez el bucle interno se
ejecuta un número diferente de veces:
Cuando i vale 1, range(i) devuelve la lista [0] y por tanto el bucle interno se ejecuta una sola vez y el programa
escribe una sola línea en la que i vale 1 (y j vale 0).
Cuando i vale 2, range(i) devuelve la lista [0, 1] y por tanto el bucle interno se ejecuta dos veces y el programa
escribe dos líneas en la que i vale 2 (y j vale 0 o 1 en cada una de ellas).
Cuando i vale 3, range(i) devuelve la lista [0, 1, 2] y por tanto el bucle interno se ejecuta tres veces y el programa
escribe tres líneas en la que i vale 3 (y j vale 0, 1 o 2 en cada una de ellas).
Ejercicios
5.A) Diseñá un código para que la palabra hola aparezca en pantalla 5 veces, una por renglón. A continuación agregá el
código para que aparezca 10 veces en el mismo renglón, separada por un espacio.
5.B) Creá un programa que muestre una escala desde el 0 hasta un valor elegido por el usuario. El salto de la escala
también lo decide el usuario.
5.C) Diseñá un código que muestre la tabla de multiplicar de un número del 1 al 10 ingresado por el usuario. Si el
usuario ingresa un número fuera de ese rango debe mostrar la palabra “error”.
5.D) Escribí un programa que pida un número de dados y muestre los valores de ese número de dados, al azar.
5.E) Escribí un programa que pida un número de jugadores y tire un dado para cada jugador.
5.F) Escribí un programa que pida un número de jugadores, que pida un valor a conseguir, que tire un dado para cada
jugador y diga si han conseguido obtener el valor.
5.G) Escribí un programa que pida un número de dados, que tire el número de dados indicado y diga cuál es el valor más
alto obtenido.
5.H) Diseñá un programa en el que la computadora genere 10 números al azar entre 1 y 20. Para cada uno, el usuario
deberá adivinar si el número que saldrá es “par” o “impar”. Se deberá contar la cantidad de aciertos que logró la
persona.
5.i) Diseñá un programa para que se ingresen los nombres de una cierta cantidad de alumnos determinada por el
usuario, junto con las tres notas trimestrales de cada uno de ellos. El programa deberá informar el promedio de cada
uno de la siguiente manera: “El alumno (nombre) tiene un promedio de (promedio)”
5.J) En la base de datos de una empresa se ingresan sexo y sueldo de una cierta cantidad de empleados. Se desea saber
cuántos hombres y cuántas mujeres trabajan en la empresa y el sueldo promedio.
5.K) En un colegio los alumnos inscriptos a la olimpíadas de matemática se dividen en tres niveles según el año al que
pertenecen. El Primer nivel está formado por los alumnos de Primero y Segundo año, el Segundo nivel por los de Tercer
y Cuarto Año y el Tercer Nivel por los alumnos de Quinto año y Sexto año. Se desea saber la cantidad de inscriptos en
cada uno de los niveles conociendo como dato en qué año de la secundaria se encuentra el alumno y la cantidad total
de alumnos que optaron por participar de la competencia.
5.L) El factorial de un número natural se define como el producto de todos los números naturales hasta el mismo. Por
ejemplo:
Factorial de 5 = 5! = 5*4*3*2*1 = 120
Factorial de 11 = 11! = 11*10*9*8*7*6*5*4*3*2*1 = 39.916.800
“Alguien compra una pareja de conejos (un macho y una hembra), luego de
un mes de haber hecho la compra esos conejos son adultos, después de dos
meses de haber hecho la compra esa pareja de conejos da a luz a otra pareja
de conejos (un macho y una hembra), al tercer mes, la primera pareja de
conejos da a luz a otra pareja de conejos y al mismo tiempo, sus primeros
hijos se vuelven adultos. Cada mes que pasa, cada pareja de conejos adultos
da a luz a una nueva pareja de conejos, y una pareja de conejos tarda un mes
en crecer. Se desea conocer cuántas parejas de conejos adultos se tienen
pasados n meses de la compra.”
Inventá un código que permita al usuario decidir hasta qué número de términos desea desarrollar la serie de Fibonacci y
muestre ese desarrollo en pantalla.
5.M) Desarrollá un programa que muestre los siguientes desarrollos hasta la cantidad de renglones ingresada por el
usuario:
a) * b) 1 c) ***** d) 54321 e) * f) 1
** 12 **** 4321 *** 121
*** 123 *** 321 ***** 12321
**** 1234 ** 21 ******* 1234321
***** 12345 * 1 ******** 123454321
5.N) Un número triangular es aquel que puede recomponerse en la forma de un triángulo cuyos lados están formados
por la misma cantidad de puntos (por convención, el primer número triangular es el 1). Los números triangulares, junto
con otros números figurados, fueron objeto de estudio por Pitágoras y los Pitagóricos.
De manera que la lista de números triangulares es la siguiente: 1, 3, 6, 10, 15, 21, etc…
Bibliografía:
Bahit, E. (2012). ”Curso Python para principiantes.” Buenos Aires: eugeniabahit.com.
Shokeen, M. (2020). Mathematical Modules in Python - Envato Tuts+ Code Tutorials. Recuperado
desde: https://code.tutsplus.com/series/mathematical-modules-in-python--cms-1116
Sintes Marco, B. (2020). Introducción a la programación con Python. www.mclibre.org. Recuperado
desde: https://www.mclibre.org/consultar/python/