bourzat / ist-project

0 stars 1 forks source link

Grade Analysis #1

Open Tbaraka opened 7 months ago

Tbaraka commented 7 months ago

import numpy as np

class Student: def init(self, name, scores): self.name = name if isinstance(scores, list) and all(isinstance(score, (int, float)) for score in scores): self.scores = scores else: self.scores = [scores]

def grade(self):
    avg = np.mean(self.scores)
    if avg >= 90:
        return 'A'
    elif avg >= 80:
        return 'B'
    elif avg >= 70:
        return 'C'
    elif avg >= 60:
        return 'D'
    else:
        return 'F'

def grade_analysis(students): grade_dist = {'A': 0, 'B': 0, 'C': 0, 'D': 0, 'F': 0} total_score = 0 top_performers = []

for student in students:
    grade = student.grade()
    grade_dist[grade] += 1
    total_score += np.mean(student.scores)
    if np.mean(student.scores) >= 85.0:
        top_performers.append(student.name)

avg_score = total_score / len(students)

return grade_dist, avg_score, top_performers

students = [Student('John', 85), Student('Jane', 75), Student('Mike', [92]), Student('Sara', [60]),Student('Ian', [59]),Student('Teddy', [50]),Student('Ken', [65])]

grade_dist, avg_score, top_performers = grade_analysis(students)

print("Grade distribution:") for grade, count in grade_dist.items(): print(f"{grade}: {count}")

print(f"\nAverage score: {avg_score:.2f}") print(f"Top performers (above 85%): {', '.join(top_performers)}")