1

Mi primer Proyecto Python

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

Escribe tu comentario
+ 2