Se trata de poder establecer el promedio de notas de tres alumnos basado en las siguientes condiciones:
a) Cada alumno posee tres notas diferentes
b) Debemos calcular el promedio de los tres alumnos
c) Determinar cual es el mejor promedio
Los datos de los alumnos son los siguientes
Nombre Nota 1 Nota 2 Nota 3
Pedro Lopez 10 8 7
Juan Martinez 6 10 10
María Cruz 10 10 9
Para resolver este caso usaremos una lista que contendrá las notas de loa aslumnos asi como su nombre
alumnos =[
['Pedro Lopez',10,8,7],
['Juan Martinez ',6,10,10],
['María Cruz',10,10,9]
]
Luego inicializaremos un par de variables para que almacenen el mejor promedio y el nombre del alumno que lo obtuvo, para nuestro caso mayorPromedio, y nombreMejor. El truco aquí es que si en medio de la iteraciones conseguimos un valor mayor al contenido actual de la variable, esta se actaliza con el contenido de la misma con los valores conrrespondientes.
En primer término creamos el ciclo de cálculo del promedio de cada alumno, esto lo hacemos con un ciclo for, el cual iterara entre los elementos de la lista
# inicializamos el mayor de los promedios
mayorPromedio=0.0
nombreMejor=""
# ciclo de claculo de los promedios de cada alumno
for alumno in alumnos:
promedioAlumno=(alumno[1]+alumno[2]+alumno[3])/3
nombreAlumno=alumno[0]
print (f"El promedio del alumno {nombreAlumno} es {promedioAlumno}")
El anterior ciclo recorre la lista extrayendo un elemento a la vez el cual corresponde a un alumno con sus tres notas, luego calcula el promedio correspondiente y lo imprime a manera de información
La siguiente fase consiste en determinar cual es el alumno que resultó con el mejor promedio, para ello introduciremos dentro del ciclo una validación pata comparar con cada iteración cual es el valor del promedio del alumno correspondiente y así poder determinar si este es el mayor de todos, lo logramos con un IF comparando el valor de mayorPromedio contra promedioAlumno, si resulta en verdadero, susituimos el valor de mayorPromedio por el promedioAluimno, asi como la variable NombreMejor con el nombre del alumno.
Es de hacer notar que en la primera iteración esto siempre se cumplirá por que mayorPromedio es cero y por lo tanto ocurre la sustitución, el código quedaría como este
if (promedioAlumno > mayorPromedio):
mayorPromedio=promedioAlumnonombreMejor=nombreAlumno
Si unimos todas las piezas dentro del ciclo for nos quedaría esto
for alumno in alumnos:
promedioAlumno=(alumno[1]+alumno[2]+alumno[3])/3nombreAlumno=alumno[0]
print (f"El promedio del alumno {nombreAlumno} es {promedioAlumno}")
if (promedioAlumno > mayorPromedio):
mayorPromedio=promedioAlumnonombreMejor=nombreAlumno
Por último nos faltaría indicar cual resultó el mejor promedio, una sencilla línea para imprimir las variables mayorPromedio y nombreMejor bastará para tal fin, las cuales podemos apreciar de la siguiente manera
print (f"El mejor alumno fue {nombreMejor}
Todo el código puede ser el siguiente
alumnos =[
['Pedro Lopez',10,8,7],
['Juan Martinez ',6,10,10],
['María Cruz',10,10,9]
]
# inicializamos el mayor de los promedios
mayorPromedio=0.0
nombreMejor=""# ciclo de claculo de los promedios de cada alumnofor alumno in alumnos:
promedioAlumno=(alumno[1]+alumno[2]+alumno[3])/3
nombreAlumno=alumno[0]
print (f"El promedio del alumno {nombreAlumno} es {promedioAlumno}")
if (promedioAlumno > mayorPromedio):
mayorPromedio=promedioAlumno
nombreMejor=nombreAlumno
print ("--------------------------")
print (f"El mejor alumno fue {nombreMejor} con un promedio de {mayorPromedio}")
print ("fin del programa")
Algunas mejoras que podríamos introducir sería por ejempplo que el usuario digite el nombre del alumno así como sus tres notas y de esa manera crear de forma dinámica la lista lo cual podríamos incluso no limitar a 3 alumnos, sino mas si así lo deseáramos introduciendo una modificación, con el cliclo While.
En este caso tendríamos que establecer una condición de control que permita establecer cuando el usuario dejará de introducir datos; con cada iteración de introduce el nombre del alumno, las tres notas y luego se pregunta si desea seguir procesando mas alumnos, si el usuario determina que no, se proceden a los cálculos, de lo contrario se seguirá almacenando información.
Se inicializaran dos listas que almacenarán los datos de un alumno inclucyendo las notas y una segunda lista que será la lista de todos los alumnos incluidos
El código de llenado sería como este
nombre = input ('Suministre Nombre del alumno: ')
n1 = int(input ('Suministre Nota 1: '))
n2 = int(input ('Suministre Nota 2: '))
n3 = int(input ('Suministre Nota 3: '))
# almacenamos enla lista correspondiente al alumno
alumno.append(nombre)
alumno.append(n1)
alumno.append(n2)
alumno.append(n3)
# almacenamos este alumno enla lista de alumnos
alumnos.append(alumno)
Para que sea repetitivo encerraremos esto dentro del ciclo while, forzando su entrada
respuesta=True
alumno=[]
alumnos=[]
while respuesta:
nombre = input ('Suministre Nombre del alumno: ')
n1 = int(input ('Suministre Nota 1: '))
n2 = int(input ('Suministre Nota 2: '))
n3 = int(input ('Suministre Nota 3: '))
# almacenamos enla lista
alumno.append(nombre)
alumno.append(n1)
alumno.append(n2)
alumno.append(n3)
# almacenamos este alumno enla lista de alumno
alumnos.append(alumno)
Ahora bien este ciclo se repetirá mientras la condiciónse cumpla, en este caso respuesta== true, para evitar que sea infinito debemos preguntar al usuario si desea continuar, para ello introducimos una pregunta al usuario sobre su intención o node continuar
seguir = input ("Introduzca S para continuar de lo contrario se pasara a los cálculos, desea Continuar S/N:? ")
Pero debemos tener una precaución y es que el usuario puede terner activada la tecla Maúscula del teclado conlo cual lalógica de nuestro programa no funcionará, por ello podems asegurar quela comparación sea aminúscula, conla función lower, tras lo cual nuestro código queda dela siguiente manera
seguir = input ("Introduzca S para continuar de lo contrario se pasara a los cálculos, desea Continuar S/N:? ")
segir = seguir.lower()
Ahora si podemos comprar si el usuario desea ono continuar, comparando su respuesta y cambiando el valor dela variable de control del cilco respuesta, eso lo logramos así
if (seguir != ‘s’):
respuesta=False
De esta forma aseguramos un ciclo finito para el llenado de las notas del alumno, la solución completa sería como esta
# inicializamos el mayor de los promedios
mayorPromedio=0.0
nombreMejor=""
respuesta=True
alumno=[]
alumnos=[]
# ciclo de llenado de notas de los alumnos
while respuesta:
nombre = input ('Suministre Nombre del alumno: ')
n1 = int(input ('Suministre Nota 1: '))
n2 = int(input ('Suministre Nota 2: '))
n3 = int(input ('Suministre Nota 3: '))
# almacenamos enla lista individual del alumno
alumno.append(nombre)
alumno.append(n1)
alumno.append(n2)
alumno.append(n3)
# almacenamos este alumno enla lista de alumnos
alumnos.append(alumno)
seguir = input ("Introduzca S para continuar de lo contrario se pasara a los cálculos, desea Continuar S/N:? ")
segir = seguir.lower()
if (seguir != ‘s’):
respuesta=False
# ciclo de claculo de los promedios de cada alumno
for alumno in alumnos:
promedioAlumno=(alumno[1]+alumno[2]+alumno[3])/3
nombreAlumno=alumno[0]
print (f"El promedio del alumno {nombreAlumno} es {promedioAlumno}")
if (promedioAlumno > mayorPromedio):
mayorPromedio=promedioAlumno
nombreMejor=nombreAlumno
print ("--------------------------")
print (f"El mejor alumno fue {nombreMejor} con un promedio de {mayorPromedio}")
print (“fin del programa”)
Con esto podemos cumplir los requerimientos expuestos en el tutorial