Skip to content

Commit 21988ac

Browse files
committed
updated part05
1 parent 8c4a272 commit 21988ac

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

part05/26_student_database.py

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
def add_student(database: dict, name: str):
2+
database[name] = {}
3+
4+
5+
def add_course(database: dict, name: str, course: tuple):
6+
# ignore courses with grade 0
7+
if course[1] == 0:
8+
return
9+
# check if course is repeated
10+
elif course[0] in database[name]:
11+
if database[name][course[0]] < course[1]:
12+
database[name][course[0]] = course[1]
13+
# new course
14+
else:
15+
new_dict = {}
16+
new_dict[course[0]] = course[1]
17+
database[name].update(new_dict)
18+
19+
20+
def calc_avg_grade(grades: list) -> float:
21+
return sum(grades) / len(grades)
22+
23+
24+
def print_student(database: dict, name: str):
25+
if name in database:
26+
print(f'{name}:')
27+
if database[name]:
28+
grades = []
29+
print(f' {len(database[name])} completed courses:')
30+
for key, value in database[name].items():
31+
print(f' {key} {value}')
32+
grades.append(value)
33+
print(f' average grade {calc_avg_grade(grades)}')
34+
else:
35+
print(f' no completed courses')
36+
else:
37+
print(f'{name}: no such person in the database')
38+
39+
40+
def summary(database: dict):
41+
most_courses = 0
42+
most_courses_name = ''
43+
best_avg = 0
44+
best_avg_name = ''
45+
for student, courses_data in database.items():
46+
if len(courses_data) > most_courses:
47+
most_courses = len(courses_data)
48+
most_courses_name = student
49+
avg_grade = calc_avg_grade(courses_data.values())
50+
if avg_grade > best_avg:
51+
best_avg = avg_grade
52+
best_avg_name = student
53+
54+
print(f'students {len(database)}')
55+
print(f'most courses completed {most_courses} {most_courses_name}')
56+
print(f'best average grade {best_avg} {best_avg_name}')
57+
58+
59+
if __name__ == '__main__':
60+
students = {}
61+
add_student(students, "Peter")
62+
add_student(students, "Eliza")
63+
add_course(students, "Peter", ("Data Structures and Algorithms", 1))
64+
add_course(students, "Peter", ("Introduction to Programming", 1))
65+
add_course(students, "Peter", ("Advanced Course in Programming", 1))
66+
add_course(students, "Eliza", ("Introduction to Programming", 5))
67+
add_course(students, "Eliza", ("Introduction to Computer Science", 4))
68+
summary(students)

0 commit comments

Comments
 (0)