-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathChallenge3.py
75 lines (59 loc) · 2.28 KB
/
Challenge3.py
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
import math
studentsData = [
{
"name": "John Doe",
"grades": [
{"subject": "Math", "grade": 90},
{"subject": "English", "grade": 85},
{"subject": "Science", "grade": 92},
{"subject": "History", "grade": 88},
{"subject": "Art", "grade": 95},
],
},
{
"name": "Jane Smith",
"grades": [
{"subject": "Math", "grade": 88},
{"subject": "English", "grade": 92},
{"subject": "Science", "grade": 87},
{"subject": "History", "grade": 90},
{"subject": "Art", "grade": 93},
],
},
{
"name": "Bob Johnson",
"grades": [
{"subject": "Math", "grade": 78},
{"subject": "English", "grade": 85},
{"subject": "Science", "grade": 80},
{"subject": "History", "grade": 88},
{"subject": "Art", "grade": 82},
],
},
]
def calculate_grades(data):
average_grades_per_student = {}
average_grades_per_subject = {subject: [] for subject in set(subject_grade["subject"] for student in data for subject_grade in student["grades"])}
overall_average_grade = 0
all_grades = []
for student in data:
student_name = student["name"]
grades = [grade["grade"] for grade in student["grades"]]
average_grades_per_student[student_name] = sum(grades) / len(grades)
all_grades.extend(grades)
for subject_grade in student["grades"]:
subject = subject_grade["subject"]
grade = subject_grade["grade"]
average_grades_per_subject[subject].append(grade)
overall_average_grade = sum(all_grades) / len(all_grades)
grades_mean = sum(all_grades) / len(all_grades)
squared_diff = sum((grade - grades_mean) ** 2 for grade in all_grades)
grades_std_deviation = math.sqrt(squared_diff / len(all_grades))
return {
"average_grades": list(average_grades_per_student.values()),
"average_subjects": { sum(grades) / len(grades) for subject, grades in average_grades_per_subject.items()},
"overall_average": overall_average_grade,
"std_deviation": grades_std_deviation,
}
results = calculate_grades(studentsData)
print("Output:", results)