Skip to content
Open

1 #11

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
823 changes: 823 additions & 0 deletions Exams/Final/Copy_of_Final.ipynb

Large diffs are not rendered by default.

686 changes: 686 additions & 0 deletions Exams/Mid-term/Copy_of_Exam.ipynb

Large diffs are not rendered by default.

1,058 changes: 1,058 additions & 0 deletions Labs/Lab-1/Copy_of_Lab_1.ipynb

Large diffs are not rendered by default.

1,151 changes: 1,151 additions & 0 deletions Labs/Lab-2/Copy_of_Lab_2.ipynb

Large diffs are not rendered by default.

1,112 changes: 1,112 additions & 0 deletions Labs/Lab-3/Copy_of_Lab_3.ipynb

Large diffs are not rendered by default.

2,539 changes: 2,539 additions & 0 deletions Labs/Lab-4/Copy_of_Lab_4.ipynb

Large diffs are not rendered by default.

1,440 changes: 1,440 additions & 0 deletions Labs/Lab-5/Copy_of_Lab_5 with #9.ipynb

Large diffs are not rendered by default.

1,436 changes: 1,436 additions & 0 deletions Labs/Lab-5/Copy_of_Lab_5.ipynb

Large diffs are not rendered by default.

1,163 changes: 1,163 additions & 0 deletions Labs/Lab-6/Copy_of_Lab_6.ipynb

Large diffs are not rendered by default.

18 changes: 18 additions & 0 deletions Labs/Lab-7/lab/Data1401-Grades.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
l1_n,l1_1,l2_n,l2_1,l2_2,l2_3,l2_4,l2_5,l2_6,l2_7,l3_n,l3_1,l3_2,l3_3,l3_4,l3_5,l3_6,l3_7,l3_8,l3_9,l3_10,l3_11,l3_12,l3_13,l3_14,l4_n,l4_1,l4_2,l4_3,l4_4,l4_5,l4_6,l4_7,l4_8,l4_9,l4_10,l4_11,q1_n,q1_1,e1_n,e1_1,e1_2,e1_3,e1_4,e1_5,e1_6,e1_7,e1_8,e1_9,e1_10,e1_11,e1_12,e1_13,e1_14,e1_15
1,10,7,0,10,10,8,10,10,10,14,9,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,1,9.5,15,9,9,0,9,8,0,0,0,0,0,0,0,0,0,0
1,10,7,0,0,0,0,0,0,0,14,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,1,0,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1,10,7,0,0,0,0,0,0,0,14,9,10,10,10,7,10,3,6,3,3,0,0,0,0,11,0,0,0,0,0,0,0,0,0,0,0,1,5,15,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0
1,10,7,10,10,3,9.5,10,10,9.5,14,10,10,10,8,5,10,5,10,3,0,10,3,10,8,11,10,10,10,10,10,10,0,0,10,5,0,1,10,15,9,9,10,9,7,9,0,0,10,10,9,5,10,8,10
1,10,7,10,10,9.5,0,10,10,0,14,9.5,0,0,10,0,10,5,10,7,0,10,6,10,0,11,10,10,6,0,0,0,0,0,0,0,0,1,0,15,0,0,0,0,5,0,7,0,3,3,3,0,3,0,0
1,10,7,10,10,10,9.5,10,10,9.5,14,5,9.5,9.5,8,10,10,8,10,8,0,5,6,0,0,11,0,10,10,10,0,5,0,0,0,0,0,1,9.5,15,9,9,10,9,9,10,7,0,9,9,9,0,5,0,0
1,10,7,10,10,0,5,10,10,9.5,14,9.5,10,10,8,10,8,9,0,0,0,0,0,0,0,11,0,10,10,0,0,10,0,0,0,0,0,1,10,15,9,9,10,9,0,0,0,0,0,0,0,0,0,0,0
1,10,7,10,10,10,9.5,10,10,9.5,14,10,10,10,10,0,0,0,0,0,0,0,0,0,0,11,10,10,10,10,3,3,0,0,5,0,0,1,10,15,9,9,10,0,10,0,7,5,9,9,9,0,0,0,0
1,10,7,0,10,9.5,0,10,10,0,14,10,10,10,10,0,0,0,0,0,0,0,0,0,0,11,10,10,10,10,5,3,0,3,10,7,0,1,9.5,15,9,9,10,5,10,0,9,9,9,9,9,10,5,0,0
1,10,7,10,10,0,10,10,10,10,14,10,6,10,0,0,0,0,0,0,0,0,0,0,0,11,10,10,0,7,0,0,0,0,0,0,0,1,9.5,15,9,9,10,9,5,9,7,9,10,10,10,5,10,5,0
1,10,7,10,10,0,0,10,10,7,14,10,10,10,10,7,10,6,3,10,10,10,10,10,10,11,10,10,10,10,10,5,10,10,10,10,10,1,0,15,9,9,9,9,9,10,9,9,10,10,10,10,10,5,10
1,10,7,10,10,9.5,9.5,10,10,9.5,14,9.5,10,10,10,8,10,8,10,10,7,5,0,0,0,11,10,10,10,10,5,6,0,0,0,0,0,1,10,15,9,9,10,9,8,9,7,9,10,10,10,10,0,0,0
1,10,7,10,10,5,9.5,10,10,9.5,14,5,9,9,10,7,10,10,10,10,7,10,3,5,10,11,0,0,0,0,0,0,0,0,0,0,0,1,10,15,9,9,9,8,7,10,0,9,10,9,10,9,5,0,0
1,10,7,10,10,9.5,0,10,10,0,14,9.5,10,10,10,10,10,10,10,0,0,10,5,10,10,11,0,10,10,0,0,5,0,0,0,0,0,1,0,15,9,9,10,0,8,9,7,9,10,10,10,10,10,0,0
1,10,7,10,10,9.5,9,10,10,9.5,14,10,10,10,10,10,10,9,10,3,0,3,3,5,2,11,0,0,0,0,0,0,0,0,0,0,0,1,0,15,9,9,10,5,5,0,0,10,10,10,10,0,10,5,10
1,10,7,10,10,3,7,10,10,9,14,10,10,10,10,0,10,9,10,7,7,3,7,5,8,11,10,10,10,8,5,3,0,0,7,0,0,1,9.5,15,9,9,10,10,7,10,10,10,10,10,10,10,9,8,2
1,10,7,10,10,10,10,10,10,10,14,10,10,10,10,10,10,10,10,10,10,10,10,10,10,11,10,10,10,10,10,10,10,10,10,10,10,1,10,15,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
Binary file added Labs/Lab-7/lab/__pycache__/base.cpython-36.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/base.cpython-38.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/calculator.cpython-38.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/classes.cpython-36.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/classes.cpython-38.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/csv_reader.cpython-36.pyc
Binary file not shown.
Binary file added Labs/Lab-7/lab/__pycache__/csv_reader.cpython-38.pyc
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
20 changes: 20 additions & 0 deletions Labs/Lab-7/lab/base.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import numpy as np
import math

# Create some virtual classes
class base:
__name=""

def __init__(self,name):
self.__name=name

def name(self):
return self.__name

class data(base):
def __init__(self,name):
base.__init__(self,name)

class alg(base):
def __init__(self,name):
base.__init__(self,name)
9 changes: 9 additions & 0 deletions Labs/Lab-7/lab/calculator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
from base import alg


class calculator(alg):
def __init__(self,name):
alg.__init__(self,name)

def apply(self,a_grade_book):
raise NotImplementedError
74 changes: 74 additions & 0 deletions Labs/Lab-7/lab/classes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
import base as base
import numpy as numpy
from base import data


class grade(data):
__value=0
__numerical=True
__gradebook_name=str()
__letter_grades=["F-","F","F+","D-","D","D+","C-","C","C+","B-","B","B+","A-","A","A+"]

def __init__(self,name,numerical=True,value=None):
if value:
if isinstance(value,(int,float)):
self.__numerical=True
elif isinstance(value,str):
self.__numerical=False
self.set(value)
else:
self.__numerical=numerical
self.__gradebook_name=name
data.__init__(self,name+" Grade Algorithm")

def set(self,value):
if isinstance(value,(int,float)) and self.__numerical:
self.__value=value
elif isinstance(value,str) and not self.__numerical:
if value in self.__letter_grades:
self.__value=value
else:
print (self.name()+" Error: Bad Grade.")
raise Exception

def value(self):
return self.__value

def numerical(self):
return self.__numerical

def gradebook_name(self):
return self.__gradebook_name

def __str__(self):
return self.__gradebook_name+": "+str(self.__value)

class student(data):
__id_number=0
__grades=dict()

def __init__(self,first_name, last_name,id_number):
self.__id_number=id_number
self.__grades=dict()
data.__init__(self,first_name+" "+last_name+" Student Data")

def add_grade(self,a_grade,overwrite=False):
if overwrite or not a_grade.gradebook_name() in self.__grades:
self.__grades[a_grade.gradebook_name()]=a_grade
else:
print (self.name()+" Error Adding Grade "+a_grade.name()+". Grade already exists.")
raise Exception

def id_number(self):
return self.__id_number

def __getitem__(self,key):
return self.__grades[key]

def get_grades(self):
return dict(self.__grades)

def print_grades(self):
for grade in self.__grades:
print (self.__grades[grade])

24 changes: 24 additions & 0 deletions Labs/Lab-7/lab/csv_reader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
def csv_reader(filename):
file = open(filename, 'r')
columns = None
data = []
final = []

for line in file:
if columns == None:
columns = (line.rstrip('\n').split(','))
else:
data.append(line.rstrip('\n').split(','))

for line in range(len(data)):
student_grade_dict = dict()
for grade in range(len(data[line])):
try:
float(data[line][grade])
student_grade_dict[columns[grade]] = float(data[line][grade])
except ValueError:
student_grade_dict[columns[grade]] = data[line][grade]

final.append(student_grade_dict)

return final
68 changes: 68 additions & 0 deletions Labs/Lab-7/lab/curved_letter_grade.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
from calculator import calculator
from classes import grade


class curved_letter_grade(calculator):
__grades_definition = [(.97, "A+"),
(.93, "A"),
(.9, "A-"),
(.87, "B+"),
(.83, "B"),
(.8, "B-"),
(.77, "C+"),
(.73, "C"),
(.7, "C-"),
(.67, "C+"),
(.63, "C"),
(.6, "C-"),
(.57, "F+"),
(.53, "F"),
(0., "F-")]

def __init__(self):
calculator.__init__(self, "Curved Percent Based Grade Calculator")

def apply(self, **kwargs):
gradebook = kwargs["gradebook"]

grades = []

students = gradebook.get_students()

for item in gradebook.getData():
itemName = item[:item.find('_')]
if itemName not in grades:
grades.append(itemName)


for gradeO in grades:
for student in students:
max_grade = students[student][gradeO + "_n"].value() * 10.
std_dev = gradebook[gradeO + "_STD"]
mean = gradebook[gradeO + "_Mean"]
overall_grade = students[student][gradeO + "_sum"]
percent = overall_grade.value() / max_grade
shift_to_zero = percent - (mean / max_grade)
if shift_to_zero == 0:
scale_std = 0
scaled_percent = students[student][gradeO + "_sum"].value() / max_grade
else:
scale_std = 0.1 * shift_to_zero / (std_dev / max_grade)
scaled_percent = scale_std + 0.8
if scaled_percent <= (overall_grade.value() / max_grade):
scaled_percent = (overall_grade.value() / max_grade)

curved_grade = None
for i, v in enumerate(self.__grades_definition):
if scaled_percent >= 1.:
curved_grade = grade(gradeO + "_curved", value=self.__grades_definition[0][1])
break
if (scaled_percent >= v[0]):
break

curved_grade = grade(gradeO + "_curved", value=self.__grades_definition[i][1])

students[student].add_grade(curved_grade)



102 changes: 102 additions & 0 deletions Labs/Lab-7/lab/final_grade_calculator.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
import base as base
import classes as classes

from base import alg
from classes import grade

class final_grade_calculator(alg):
GradeMap = {"A+": 12,
"A": 11,
"A-": 10,
"B+": 9,
"B": 8,
"B-": 7,
"C+": 6,
"C": 5,
"C-": 4,
"D+": 3,
"D": 2,
"D-": 1,
"F": 0}

GradeMapR = {12: "A+",
11: "A",
10: "A-",
9 : "B+",
8 : "B",
7 : "B-",
6 : "C+",
5 : "C",
4 : "C-",
3 : "D+",
2 : "D",
1 : "D-",
0 : "F"
}

def __init__(self):
self.__prefix=''
self.__n=0
alg.__init__(self, "Final Grade Calculator")

def apply(self, **kwargs):
gradebook = kwargs["gradebook"]
numberToDrop = kwargs["numberToDrop"]

students = gradebook.get_students()
print(gradebook)
exam = 'e'
lab = 'l'
quiz = 'q'

for student in students:
examGrades = self.__final_and_drop_grades_for_student_item__(students[student], exam)
labGrades = self.__final_and_drop_grades_for_student_item__(students[student], lab)
quizGrades = self.__final_and_drop_grades_for_student_item__(students[student], quiz)

for i in range(numberToDrop):
minVal = 99999999
min = 0
if (len(labGrades) == 0):
break
for gradeVal in range(len(labGrades)):
if labGrades[gradeVal] < minVal:
minVal = labGrades[gradeVal]
min = gradeVal
labGrades.pop(min)

examTotal = 0
labTotal = 0
quizTotal = 0
total = 0
for eg in examGrades:
examTotal += eg * .2
for lab in labGrades:
labTotal += lab
for qz in quizGrades:
quizTotal += qz
total = (examTotal * .4) + (labTotal * .5) + (quizTotal * .1)

total /= (len(examGrades) + len(labGrades) + len(quizGrades))
total = round(total)

if (total > 12) :
total = 12

final_grade = grade("FINAL_GRADE", value=self.GradeMapR[total][0])

students[student].add_grade(final_grade)



def __final_and_drop_grades_for_student_item__(self, a_student, item):
items = []

for grade in a_student.get_grades():
if grade[0] == item and grade[len(grade) - 1] == 'd':
items.append(grade)

gradesVals = []
for item in items:
gradesVals.append(self.GradeMap[a_student[item].value()])
return gradesVals
62 changes: 62 additions & 0 deletions Labs/Lab-7/lab/gradebook.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import base as base
import classes as classes

from base import data

class grade_book(data):
# New member class to hold arbitrary data associated with the class

__data=dict()
__students=dict()

def __init__(self,name):
data.__init__(self,name+" Course Grade Book")
self.__students=dict()
self.__data=dict()

# New method to access data
def __getitem__(self,key):
return self.__data[key]

# New method to add data
def __setitem__(self, key, value):
self.__data[key] = value

def add_student(self,a_student):
self.__students[a_student.id_number()]=a_student

def getData(self):
return self.__data
# New method to allow iterating over students
def get_students(self):
return self.__students

def assign_grade(self,key,a_grade):
the_student=None
try:
the_student=self.__students[key]
except:
for id in self.__students:
if key == self.__students[id].name():
the_student=self.__students[id]
break
if the_student:
the_student.add_grade(a_grade)
else:
print (self.name()+" Error: Did not find student.")

def apply_calculator(self,a_calculator,**kwargs):
a_calculator.apply(**kwargs)

def print_grade_calculations(self):
grades = [];
for item in self.__data:
itemName = item[:item.find('_')]
if itemName not in grades:
grades.append(itemName)
print("-----------------------------")
print("| Grade \t| Mean \t| STD \t|")
print("-----------------------------")
for item in grades:
print("| "+ item + " \t|\t" + str(round(self.__data[item + "_Mean"],2)) + " \t | \t" + str(round(self.__data[item + "_STD"],2)) + " |")
print("-----------------------------")
Loading