In this project, I've developed an Advanced Grade Calculator that not only calculates the average grade but also accounts for credit hours and predicts future performance based on historical grade trends. This tool uses an object-oriented approach, allowing for more robust data management and complex computational capabilities.
# Advanced Grade Calculator
class Course:
def __init__(self, name, credits):
self.name = name
self.credits = credits
self.grades = []
def add_grade(self, grade):
self.grades.append(grade)
def average_grade(self):
weight = {'A+': 4.3, 'A': 4.0, 'A-': 3.7, 'B+': 3.3, 'B': 3.0, 'B-': 2.7,
'C+': 2.3, 'C': 2.0, 'C-': 1.7, 'D': 1.0, 'F': 0.0}
total = sum(weight[grade] for grade in self.grades)
return total / len(self.grades) if self.grades else 0
class Student:
def __init__(self, name):
self.name = name
self.courses = {}
def add_course(self, course):
self.courses[course.name] = course
def calculate_gpa(self):
total_weighted_grade = 0
total_credits = 0
for course in self.courses.values():
course_avg = course.average_grade()
total_weighted_grade += course_avg * course.credits
total_credits += course.credits
return total_weighted_grade / total_credits if total_credits else 0
def predict_performance(self):
# Basic prediction logic based on improvement trends
improvements = []
for course in self.courses.values():
if len(course.grades) > 1:
improvement = course.grades[-1] > course.grades[-2]
improvements.append(improvement)
prediction = "Likely to improve" if sum(improvements) / len(improvements) > 0.5 else "No significant change expected"
return prediction
# Example usage:
student = Student("John Doe")
math = Course("Calculus", 3)
math.add_grade('B')
math.add_grade('A-')
student.add_course(math)
physics = Course("Physics", 4)
physics.add_grade('B+')
student.add_course(physics)
print(f"Calculated GPA: {student.calculate_gpa():.2f}")
print("Performance Prediction:", student.predict_performance())
This script introduces classes for both courses and students, where courses manage their own grades and credits, and the student class manages multiple courses. The calculate_gpa method in the Student class computes a weighted average based on credit hours. The predict_performance method provides a simple prediction on whether the student’s grades are likely to improve based on their past performance trend.