Sentencia for ...
Esta es una de las sentencias más usadas en todos los lenguajes de programación pues nos permite repetir un bloque de instrucciones un número de determinado de veces.
Se puede ejecutar 5 veces, en cuyo caso usaremos:for i in range(5)
Podremos ejecutar 20 veces, en cuyo caso usaremos: for j in range(20)
Del mismo modo: for micaela in range(100), repetirá las intrucciones que le siguen hasta competar un total de 100, comenzando en 0 y terminando en 99.
range(20) ofrece una lista de números enteros de 0 a 19. Del mismo modo, range(5), de 0 a 4. La variable i, j, micaela o como querramos llamarla, es la que toma los valores contenidos en range.
Estos otros son también formas de usar la sentencia for
Si a = [12,15,9,10,15,12,17,12,10,6,11,12,15, 12, 15]
for nota in a, repetirá 15 veces las instrucciones que estén en el ámbito del for, en el cual nota toma sucesivamente: 12, 15, 9, ..., 12, 15.
Sintaxis de la sentencia for
for variableIndice in Lista:
|--->
|--->
|--->
|---> La línea del for debe terminar en ":"
Cada siguiente línea que esté formando parte del ámbito del for, debe tener la identación que proporciona el editor
Para terminar el ámbito o bucle, la siguiente instrucción debe empezar al inicio de la línea o ésta debe estar vacía.
Aquí algunos ejemplos sueltos:
Usando la lista notasExamen, vamos vamos a imprimir las notas:
>>> for nota in notasExamen:
print(nota)
Otra forma de imprimirlas
>>> for nota in notasExamen:
print(nota, end=",")
Una salida mejorada requiere de usar una variable para usarla como subíndice para extraer los elementos de la lista.
>>> for i in range(15):
print("Nota",i," : ",notasExamen[i])
Aquí hemos usado a i que recorre de 0 a 14 para extraer la nota 0, 1, ..., 14
Finalmente, optimizando la salida tenemos:
>>> for i in range(15):
print("Nota {0:2d} : {1:4d}".format(i,notasExamen[i]))
Entonces, no olvidarse de ":" que le sigue a range o su equivalente, la identación y la siguiente instrucción que no esparte del bucle, que debe empezar al inicio de la línea.
Ejemplo 1
Vamos a leer desde teclado los nombres, notas y créditos de n alumnos. Luego vamos a obtener el promedio de cada uno de ellos y finalmente imprimiremos los nombres y sus promedios.
Solución
Según el problema, vamos a procesar a n alumnos, lo que indica que primero leeremos n como entero.
A continuación, usaremos for de 0 a n para leer cada alumno y guardar su nombre en un arreglo: nombres. Para este alumno leeremos con un for sus 5 notas.
Después de la lectura, mediante el uso de un for de 0 a n, sumaremos las notas y al terminar el for, calcularemos el promedio de 5 notas. Usaremos una variable para obtener la suma de notas.
Finalmente pasaremos a imprimir los resultados, por cada alumno.
Vamos a guardar nuestro código en el módulo myod07.py. Abra un nuevo file, grábelo como promedio.py
Iniciamos importando numpy:
import numpy as np
Definimos las listas nombres y promedio.
nombres = []
promedio = []
Leemos el valor para n: nro. de alumnos a procesar
n = int(input("Nro de alumnos: ")
Pasamos a leer el nombre del primer alumno usando for i in range(n) y lo añadimos a la lista nombres. Dentro de este for incializamos la variable suma = 0, pues por cada alumno, la suma empieza en 0. Luego, con otro for leemos las notas, las que añadimos a la variable suma. Cuando termine este for, calculamos el promedio = suma/5 y lo añadimos a una lista de promedios. En este punto damos por terminado el primer for.
for i in range(n):
for i in range(n):
nombres.append(input("Nombre: "))
suma = 0
for j in range(5):
suma = suma+int(input("Nota "+str(j)+": "))
prom = suma/5
promedio.append(prom)
Ahora pasamos a imprimir los resultados indicando el nombre del alumno y su promedio, por cada uno de ellos.
for i in range(n):
print("Alumno",nombres[i]," promedio: ",promedio[i])
Guarde el archivo y abra uno nuevo, que tendrá por nombre: mymod08.py
Ejemplo 2
Como en el caso anterior, vamos a leer los nombres de n alumnos; para cada uno de ellos vamos a leer sus 5 notas y sus créditos respectivos. Los guardaremos en listas: nombres, notas, creditos. Luego pasaremos a calcular el promedio ponderado para cada uno de los alumnos. Finalmente imprimermos el nombre, las notas y créditos y el promedio, por cada alumno.
Solución
La solución es bastante similar que el ejemplo anterior, excepto que, luego de leer el nombre de cada alumno, debe leer por separdo tanto las notas como los creditos y guardarlo en la misma lista. Al terminar la lectura, estas listas: notas y creditos, tendrán 15 elementos. Los 5 primeros para el primer alumno: 0, 1, 2, 3, 4. Los siguientes para el segundo alumno: 5, 6, 7, 8, 9. La forma que genera estas series es 5*i + j, donde i recorrerá el primer for de los tres nombres y j recorrerá el segundo de las 5 notas.
He aquí el código:
import numpy as np
# Nro de alumnos a procesar
n = int(input("Nro de alumnos: "))
# Definimos las listas
nombres = []
notas = []
creditos = []
prom = []
# Lectura para cada alumnos y dentro de él las 5 notas y los 5 créditos
for i in range(n):
nombres.append(input("Nombre del alumno "+str(i+1)+": "))
for j in range(5):
notas.append(int(input("Nota "+str(j+1)+": ")))
for j in range(5):
creditos.append(int(input("Credito "+str(j+1)+": ")))
# Los cálculos
for i in range(len(nombres)):
suma = 0
sumaCred = 0
for j in range(5*i,5*i+5):
suma = suma+notas[j]*creditos[j]
sumaCred = sumaCred+creditos[j]
prom.append(suma/sumaCred)
# La impresión
for i in range(n):
print("\n\nNombre: ",nombres[i],end = ",")
for j in range(5):
print("Nota ",notas[5*i+j],"Credito: ",creditos[5*i+j])
print("Promedio ponderado: %6.2f"%prom[i])
La imagen siguiente muestra parte de este código

Guarde las modificaciones en el archivo mymod08.py
Continuar en la siguiente sesión