Inauguramos la serie de «Ejercicios de Programación«, donde expondremos algunos problemas de libros o cursos de programación, con la finalidad de que se vayan familiarizando con la lógica usada para resolver problemas comunes. Si pueden optimizar o encontraron una mejor implementación, compartanla en nuestra página de Facebook, para que todos nos retroalimentemos.
Libro: Intro to Python® for Computer Science and Data Science
Autor: Paul Deitel / Harvey Deitel
Problema original:
2.10 (Arithmetic, Highest and Lowest) Write a script that inputs the grades (in integers) of 3 courses from the user. First display the average grade of the three courses, and then the names and the grades of the courses with the highest and the lowest grades.
Necesitamos un programa que lea las calificaciones (en número entero) de 3 cursos del usuario. Debemos mostrar el promedio de los tres cursos y después los nombre y calificaciones de los cursos con la calificación máxima y mínima.
SOLUCIÓN:
# Creamos una lista vacia para los cursos y sus calificaciones
CyC = []
#Leemos las respuestas del usuario, 3 en este caso
CyC.append( [input('Nombre del curso: '),int(input('Calificación del curso: '))] )
CyC.append( [input('Nombre del curso: '),int(input('Calificación del curso: '))] )
CyC.append( [input('Nombre del curso: '),int(input('Calificación del curso: '))] )
# Inicializamos la variable suma para calcular la suma de todas las calificaciones
suma = 0
# Recorremos los valores de la lista, 'x' es el nombre del curso, 'y' la calificación
for x,y in CyC:
# Sumamos la calificación a la variable suma
suma = suma + y
# Ahora calculamos el promedio, dividiendo el total entre el número de elementos de la lista
promedio = suma/len(CyC)
# Imprimimos el valor del promedio
print('El promedio de las calificaciones es: ',promedio)
"""
Determinamos los valores máximo y mínimo dentro de los valores de la lista
usamos lambda para que solo tome el campo de la calificación, como nuestra lista tiene dos campos:
['nombre del curso', 'calificacion']
y teniendo en cuenta que el indice de la lista comienza en 0, indicamos a lamda
que use el indice 1.
"""
maximo = (max(CyC, key = lambda t:t[1]))
minimo = (min(CyC, key = lambda t:t[1]))
# imprimimos el resultado
print('El curso',maximo[0], 'tiene la mayor calificacion que es: ',maximo[1])
print('El curso',minimo[0], 'tiene la menor calificacion que es: ',minimo[1])
Y al ejecutarlo vemos que satisface los requerimientos del problema:
Nombre del curso: Fisica
Calificación del curso: 90
Nombre del curso: Filosofia
Calificación del curso: 80
Nombre del curso: Programación
Calificación del curso: 100
El promedio de las calificaciones es: 90.0
El curso Programación tiene la mayor calificacion que es: 100
El curso Filosofia tiene la menor calificacion que es: 80
Obviamente se puede mejorar, por ejemplo, se puede hacer que primero pregunte el número (n) de materias que va a ingresar y después en un ciclo agregue los valores a la lista n veces.