Saturday, August 5, 2023

Calculating percentiles of marks (roughly as per CBSE guidelines)

import random, csv


nos = 135

nop = 8

percentile = nos // nop

grades = ["A+", "A", "B+", "B", "C+", "C", "D", "F",]


def WriteCSV():

  out = open("Marks.csv", 'w', newline='')

  W = csv.writer(out)

  W.writerow(["English", "Maths"])

  for i in range(nos):

    E = random.randint(30, 100)

    M = random.randint(30, 100)

    W.writerow([E, M])

  out.close()


def ReadCSV():

  inn = open("Marks.csv", 'r', newline='')

  R = csv.reader(inn)

  L = list(R)

  eMarks, mMarks = [], []

  eCutOffs, mCutOffs = [], []

  for i in range(1, len(L)):

    eMarks.append(int(L[i][0]))

    mMarks.append(int(L[i][1]))

  eMarks.sort(reverse=True)

  mMarks.sort(reverse=True)

  for i in range(0, len(eMarks), percentile):

    print(eMarks[i:i+percentile])

    if i < nop * percentile:

      eCutOffs.append(eMarks[i+percentile])

  print(eCutOffs)

  for i in range(1, len(L)):

    for j in range(len(eCutOffs)):

      if int(L[i][0]) >= eCutOffs[j]:

        grade = grades[j]

    L[i].insert(1, grade)

  print(L)


  out = open("Grades.xlsx", 'w', newline='')

  W = csv.writer(out)

  W.writerows(L)

  out.close()


WriteCSV()

ReadCSV()

No comments:

Post a Comment