I wrote a "gradebook" program. This takes in grades for various assignments. The assignments types are weighted differently and final grade is computed at the end. The code works but I can't help but think I am being ham handed in my approach. Should I be using a dictionary instead to storeof storing things like hw_finalhw_final
, lab_finallab_final
, and exam_finalexam_final
as global variables?
hw_tally = 0
hw_weight_count = 0
hw_final = 0
lab_tally = 0
lab_weight_count = 0
lab_final = 0
exam_tally = 0
exam_weight_count = 0
exam_final = 0
def assignment(kind, grade, weight=1):
global hw_tally, hw_weight_count, hw_final, lab_tally,
lab_weight_count, lab_final, exam_tally, exam_weight_count, exam_final
if kind == 'hw':
hw_weight_count += weight
hw_temporary = (grade * weight)
hw_tally += hw_temporary
hw_final = hw_tally/hw_weight_count
elif kind == 'lab':
lab_weight_count += weight
lab_temporary = (grade * weight)
lab_tally += lab_temporary
lab_final = lab_tally/lab_weight_count
elif kind == 'exam':
exam_weight_count += weight
exam_temporary = (grade * weight)
exam_tally += exam_temporary
exam_final = exam_tally/exam_weight_count
assignment('hw', 81)
assignment('exam', 90, 4)
assignment('hw', 100, 2)
assignment('lab', 84, 3)
assignment('lab', 90, 2)
assignment('exam', 78)
assignment('exam', 85)
assignment('lab', 88)
assignment('exam', 75)
hw_weight_percent = 0.4
lab_weight_percent = 0.1
exam_weight_percent = 0.5
final_grade = ((hw_final * hw_weight_percent) + (lab_final *
lab_weight_percent) + (exam_final * exam_weight_percent))
print ("Final grade = ", final_grade)