-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalculadora_promedios.py
More file actions
130 lines (104 loc) · 5.25 KB
/
calculadora_promedios.py
File metadata and controls
130 lines (104 loc) · 5.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
"""
Actividad 1 Python - Calculadora de promedios de calificaciones de materias.
Javier Navarro
"""
UMBRAL = 5.0
def mostrar_resultados(lista_nombres_materias, lista_calificaciones_materias, promedio, indice_maximo, indice_minimo, lista_aprobadas, lista_reprobadas):
"""Muestra los resultados del análisis de calificaciones.
:param lista_nombres_materias: Lista de nombres de las materias.
:type lista_nombres_materias: list[str]
:param lista_calificaciones_materias: Lista de calificaciones de las materias.
:type lista_calificaciones_materias: list[float]
:param promedio: Promedio de las calificaciones.
:type promedio: float
:param indice_maximo: Índice de la calificación más alta.
:type indice_maximo: int
:param indice_minimo: Índice de la calificación más baja.
:type indice_minimo: int
:param lista_aprobadas: Lista de índices de calificaciones aprobadas.
:type lista_aprobadas: list[int]
:param lista_reprobadas: Lista de índices de calificaciones reprobadas.
:type lista_reprobadas: list[int]
"""
print(f"\nPromedio de las calificaciones: {promedio:.2f}")
print(f"La calificación más alta es {lista_calificaciones_materias[indice_maximo]:.2f} en la materia '{lista_nombres_materias[indice_maximo]}'")
print(f"La calificación más baja es {lista_calificaciones_materias[indice_minimo]:.2f} en la materia '{lista_nombres_materias[indice_minimo]}'")
print("\nMaterias aprobadas:")
for indice in lista_aprobadas:
print(f"- {lista_nombres_materias[indice]}: {lista_calificaciones_materias[indice]:.2f}")
print("\nMaterias reprobadas:")
for indice in lista_reprobadas:
print(f"- {lista_nombres_materias[indice]}: {lista_calificaciones_materias[indice]:.2f}")
def encontrar_extremos(calificaciones):
"""Encuentra los índices de la calificación más alta y más baja.
:param calificaciones: Lista de números representando las calificaciones.
:type calificaciones: list[float]
:return: Una tupla con dos valores: el índice de la calificación máxima
y el índice de la calificación mínima.
:rtype: tuple[int, int]
"""
_indice_maximo = calificaciones.index(max(calificaciones))
_indice_minimo = calificaciones.index(min(calificaciones))
return _indice_maximo, _indice_minimo
def determinar_estado(calificaciones, umbral):
"""Determina qué calificaciones son aprobadas y cuáles reprobadas.
:param calificaciones: Lista de números representando las calificaciones.
:type calificaciones: list[float]
:param umbral: Número que representa el umbral de aprobación.
:type umbral: float
:return: Una tupla con dos listas: la primera contiene los índices de las
calificaciones aprobadas, y la segunda los índices de las
calificaciones reprobadas.
:rtype: tuple[list[int], list[int]]
"""
_lista_aprobadas = []
_lista_reprobadas = []
for indice, calificacion in enumerate(calificaciones):
if calificacion >= umbral:
_lista_aprobadas.append(indice)
else:
_lista_reprobadas.append(indice)
return _lista_aprobadas, _lista_reprobadas
def calcular_promedio(calificaciones):
if len(calificaciones) == 0:
return 0.0
return sum(calificaciones) / len(calificaciones)
def ingresar_nombre_materia():
while True:
nombre_materia = input("Nombre de la materia: ")
if nombre_materia.strip() == "":
print("El nombre de la materia no puede estar vacío. Por favor, inténtalo de nuevo.")
else:
return nombre_materia
def ingresar_calificacion_materia():
while True:
try:
calificacion_materia_str = input("Calificación de la materia: ")
calificacion_materia = float(calificacion_materia_str)
if(calificacion_materia <0 or calificacion_materia > 10):
print("La calificación debe estar entre 0 y 10. Por favor, inténtalo de nuevo.")
continue
return calificacion_materia
except ValueError:
print("La calificación debe ser un número válido. Por favor, inténtalo de nuevo.")
continue
def ingresar_calificaciones():
_lista_nombres_materias = []
_lista_calificaciones_materias = []
while True:
nombre_materia = ingresar_nombre_materia()
if nombre_materia.lower() == "salir":
return _lista_nombres_materias, _lista_calificaciones_materias
_lista_nombres_materias.append(nombre_materia)
_lista_calificaciones_materias.append(ingresar_calificacion_materia())
def main():
print("Calculadora de promedios de calificaciones de las materias. Escribe 'salir' como nombre de materia para finalizar.")
lista_materias, lista_calificaciones = ingresar_calificaciones()
if len(lista_materias) <= 0:
return
promedio = calcular_promedio(lista_calificaciones)
indice_maximo, indice_minimo = encontrar_extremos(lista_calificaciones)
lista_aprobadas, lista_reprobadas = determinar_estado(lista_calificaciones, UMBRAL)
mostrar_resultados(lista_materias, lista_calificaciones, promedio, indice_maximo, indice_minimo, lista_aprobadas, lista_reprobadas)
if __name__ == "__main__":
main()