Vous êtes sur la page 1sur 7

'''TO DO

-Statistics
-Finish last part of part E

'''

STUDENT_SCORE_FILENAME='student_data_prog2.txt'

#Function to read student data and return lists after parsing


def read_data (fname):
for line in open (fname, 'r'):
name.append(line.split()[0])
status.append(float(line.split()[1]))
lab1.append(float(line.split()[2]))
lab2.append(float(line.split()[3]))
lab3.append(float(line.split()[4]))
lab4.append(float(line.split()[5]))
lab5.append(float(line.split()[6]))
lab6.append(float(line.split()[7]))
lab7.append(float(line.split()[8]))
lab8.append(float(line.split()[9]))
lab9.append(float(line.split()[10]))
lab10.append(float(line.split()[11]))
prog1.append(float(line.split()[12]))
prog2.append(float(line.split()[13]))
prog3.append(float(line.split()[14]))
mid1.append(float(line.split()[15]))
mid2.append(float(line.split()[16]))
final.append(float(line.split()[17]))
hw.append(float(line.split()[18]))
part.append(float(line.split()[19]))

return name,status,lab1,lab2,lab3,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,
prog2,prog3,mid1,mid2,final,hw,part

#Function to Display the Menu


def show_instructions ():
ch = raw_input('''
Type any of the following alphabet now.
a for student-lab-average
b for student-prog-average
c for weighted-total-score
d for overall-student-grade
e for sorted data
s for statistics
q for quit''')
return ch

#Function to return scores of a particular student


def get_data_for_student(name,status,lab1,lab2,lab3,lab4,lab5,lab6,lab7,lab8,lab
9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part,allnames):
studentData=[]
ind=allnames.index(name)
studentData.append(status[ind])
studentData.append(lab1[ind])
studentData.append(lab2[ind])
studentData.append(lab3[ind])
studentData.append(lab4[ind])
studentData.append(lab5[ind])
studentData.append(lab6[ind])
studentData.append(lab7[ind])
studentData.append(lab8[ind])
studentData.append(lab9[ind])
studentData.append(lab10[ind])
studentData.append(prog1[ind])
studentData.append(prog2[ind])
studentData.append(prog3[ind])
studentData.append(mid1[ind])
studentData.append(mid2[ind])
studentData.append(final[ind])
studentData.append(hw[ind])
studentData.append(part[ind])

return studentData

def LabAverage(studentData): #Averages the labs


total=0
count=0
for i in studentData:
total += i
count += 1
return total/count

def ProgramAverage(studentData): #Averages the programs


total=0
count=0
for i in studentData:
total += i
count += 1
return total/count
def WeightedTotalGrade(studentData): #Calculates the weighted total grade
lab = LabAverage(studentData[1:10]) * .3
prog1 = studentData[11] * .08
prog2 = studentData[12] * .08
prog3 = studentData[13] * .09
mid1 = studentData[14] * .1
mid2 = studentData[15] * .1
final = studentData[16] * .15
hw = studentData[17] * .05
participation = studentData[18] * .05
Weightedtotal = lab + prog1 + prog2 + mid1 + mid2 + final + hw + participati
on
return Weightedtotal
def Grade(percentage): #Takes the weighted total grade out of 100

if percentage < 60:


return 'F'
elif percentage <63:
return 'D-'
elif percentage <67:
return 'D'
elif percentage <70:
return 'D+'
elif percentage <73:
return 'C-'
elif percentage <77:
return 'C'
elif percentage <80:
return 'C+'
elif percentage <83:
return 'B-'
elif percentage <87:
return 'B'
elif percentage <90:
return 'B+'
elif percentage <93:
return 'A-'
else:
return 'A'

def sortmenu():
print '''Choose which data to sort:
l for lab average
p for program average
m for midterm average
f for final average
w for weighted total percentage
'''
choice = raw_input("Input now: ")
if choice == 'l':
print "You have selected sorting student data by lab average"
category = 1
elif choice == 'p':
print "You have selected sorting student data by program average"
category = 2
elif choice == 'm':
print "You have selected sorting student data by midterm average"
category = 3
elif choice == 'f':
print "You have selected sorting student data by final average"
category = 4
elif choice == 'w':
print "You have selected sorting student data by total percentage"
category = 5
else:
print "Error! Not valid input!"
return category
def writeFile(fileName,category,name,status,lab1,lab2,lab3,lab4,lab5,lab6,lab7,l
ab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part):
def spacer():
outfile.write(" ")
dump = [] #This is the actual value being compared in the bubble sort
dumpindex = [] #This is the corresponding line number of that value, will be
returned by bubble sort
if category == 1: #Sorting by lab average
for i in range(60):
dump.append((lab1[i]+lab2[i]+lab3[i]+lab4[i]+lab5[i]+lab6[i]+lab
7[i]+lab8[i]+lab9[i]+lab10[i])/10)
dumpindex.append(i)
elif category == 2: #Sorting by program average
for i in range(60):
dump.append((prog1[i]+prog2[i]+prog3[i])/3)
dumpindex.append(i)
elif category == 3: #Sorting by midterm average
for i in range(60):
dump.append((mid1[i]+mid2[i])/2)
dumpindex.append(i)
elif category == 4: #Sorting by final average
for i in range(60):
dump.append(final[i])
dumpindex.append(i)
elif category == 5: #Sorting by total percentage
for i in range(60):
thisperson=[name[i],status[i],lab1[i],lab2[i],lab3[i],lab4[i],la
b5[i],lab6[i],lab7[i],lab8[i],lab9[i],lab10[i],prog1[i],prog2[i],prog3[i],mid1[i
],mid2[i],final[i],hw[i],part[i],i]
dump.append(WeightedTotalGrade(thisperson))
dumpindex.append(i)
outfile = open(fileName,'w')
neworder = BubbleSort2(dump,dumpindex) #The new order that the lines should
be in
for i in range(60):
outfile.write(name[neworder[i]])
spacer()
outfile.write(str(status[neworder[i]]))
spacer()
outfile.write(str(lab1[neworder[i]]))
spacer()
outfile.write(str(lab2[neworder[i]]))
spacer()
outfile.write(str(lab3[neworder[i]]))
spacer()
outfile.write(str(lab4[neworder[i]]))
spacer()
outfile.write(str(lab5[neworder[i]]))
spacer()
outfile.write(str(lab6[neworder[i]]))
spacer()
outfile.write(str(lab7[neworder[i]]))
spacer()
outfile.write(str(lab8[neworder[i]]))
spacer()
outfile.write(str(lab9[neworder[i]]))
spacer()
outfile.write(str(lab10[neworder[i]]))
spacer()
outfile.write(str(prog1[neworder[i]]))
spacer()
outfile.write(str(prog2[neworder[i]]))
spacer()
outfile.write(str(prog3[neworder[i]]))
spacer()
outfile.write(str(mid1[neworder[i]]))
spacer()
outfile.write(str(mid2[neworder[i]]))
spacer()
outfile.write(str(final[neworder[i]]))
spacer()
outfile.write(str(hw[neworder[i]]))
spacer()
outfile.write(str(part[neworder[i]]))

outfile.write('\n')

outfile.close()

#Ascending bubble sort


def BubbleSort2(lst,index):
lst = list(lst)
swapped = True
while swapped:
swapped = False
for i in range(len(lst)-1):
if lst[i] > lst[i+1]:
lst[i], lst[i+1] = lst[i+1], lst[i]
index[i],index[i+1] = index[i+1],index[i]
swapped = True
return index
#Main Program Begins here.

#Create lists to hold the many lists used


name = []
status = []
lab1 = []
lab2 = []
lab3 = []
lab4 = []
lab5 = []
lab6 = []
lab7 = []
lab8 = []
lab9 = []
lab10 = []
prog1 = []
prog2 = []
prog3 = []
mid1 = []
mid2 = []
final = []
hw = []
part = []
fname=STUDENT_SCORE_FILENAME
print "Reading From: %s" %fname

#student data stored in the below lists


name,status,lab1,lab2,lab3,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,prog2,prog3
,mid1,mid2,final,hw,part=read_data(fname)
#Start the menu
ch=show_instructions()

while (ch != 'q'):

if (ch=='a'):
student_last_name=raw_input("Type the Student's Last Name:")
studentData=get_data_for_student(student_last_name,status,lab1,lab2,lab3
,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part,n
ame)
print "This student's lab average is %f" % LabAverage(studentData[1:10])
elif (ch=='b'):
student_last_name=raw_input("Type the Student's Last Name:")
studentData=get_data_for_student(student_last_name,status,lab1,lab2,lab3
,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part,n
ame)
print "This student's program average is %f" % ProgramAverage(studentDat
a[11:13])
elif (ch=='c'):
student_last_name=raw_input("Type the Student's Last Name:")
studentData=get_data_for_student(student_last_name,status,lab1,lab2,lab3
,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part,n
ame)
print "This student's weighted total percentage is %f" % WeightedTotalGr
ade(studentData)
elif (ch=='d'):
student_last_name=raw_input("Type the Student's Last Name:")
studentData=get_data_for_student(student_last_name,status,lab1,lab2,lab3
,lab4,lab5,lab6,lab7,lab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part,n
ame)
percentage = WeightedTotalGrade(studentData)
print "This student's letter grade is %s" % Grade(percentage)
elif (ch=='e'):
category = sortmenu() #Thing that is being sorted
fileName = raw_input("Input file name to save to. Be sure to include '.t
xt'")
writeFile(fileName,category,name,status,lab1,lab2,lab3,lab4,lab5,lab6,la
b7,lab8,lab9,lab10,prog1,prog2,prog3,mid1,mid2,final,hw,part)

#elif (ch == 's'):


else:
print "Error! Try Again!!"
ch=show_instructions()
print "Goodbye!"

Vous aimerez peut-être aussi