class Course:
def __init__(self, course_name, credit_hours, grade):
self.course_name = course_name
self.credit_hours = credit_hours
self.grade = grade
class Semester:
def __init__(self, semester_number, courses):
self.semester_number = semester_number
self.courses = courses
def calculate_gpa(self):
total_grade_points = 0
total_credit_hours = 0
for course in self.courses:
total_grade_points += course.grade * course.credit_hours
total_credit_hours += course.credit_hours
return total_grade_points / total_credit_hours
class Student:
def __init__(self, name, semesters):
self.name = name
self.semesters = semesters
def calculate_cgpa(self):
total_gpa = 0
total_semesters = len(self.semesters)
for semester in self.semesters:
total_gpa += semester.calculate_gpa()
return total_gpa / total_semesters
def main():
students = []
number_of_students = int(input("Enter the number of students: "))
for i in range(number_of_students):
student_name = input(f"Enter the name of student {i + 1}: ")
number_of_semesters = int(input(f"Enter the number of semesters for
{student_name}: "))
semesters = []
for j in range(number_of_semesters):
semester_number = j + 1
number_of_courses = int(input(f"Enter the number of courses in semester
{semester_number}: "))
courses = []
for k in range(number_of_courses):
course_name = input(f"Enter the course name: ")
credit_hours = int(input(f"Enter credit hours for {course_name}:
"))
grade = float(input(f"Enter grade for {course_name}: "))
courses.append(Course(course_name, credit_hours, grade))
semesters.append(Semester(semester_number, courses))
students.append(Student(student_name, semesters))
for student in students:
print(f"CGPA of {student.name} is: {student.calculate_cgpa():.2f}")
if __name__ == "__main__":
main()