Question: I have snippits of my Python code and the output. I can't figure out why there is a header for Grade 1 1 - there

I have snippits of my Python code and the output. I can't figure out why there is a header for Grade 11- there is no grade 11 in the csv file, only 10 grades. This error is misaligning the code for the average and the letter grade. import csvdef def computeLetterGrade (gradebook):
for student, grades in gradebook.items():
if student == 'Class Average':
continue
avg = grades[-1] # Last element is the student's average
if avg >=90:
letter_grade ='A'
elif avg >=80:
letter_grade ='B'
elif avg >=70:
letter_grade ='C'
elif avg >=60:
letter_grade ='D'
else:
letter_grade ='F'
gradebook[student].append(letter_grade)
return gradebookdef writeToFile(gradebook, output_filename):
num_assignments = len(gradebook['Class Average'])
assgnments =[f'Assignment {i+1}' for i in range(num_assignments)]
with open(output_filename, 'w', newline='') as file:|
writer = csv.writer(file)
writer.writerow(['Student']+ assignments +['Average', 'Letter Grade'])
for student, grades in gradebook.items():
if student != 'Class Average':
writer.writerow([student]+ grades) def determineColumnWidths(gradebook):
num_assignments = len(gradebook.get('Class Average', []))
max_lengths =[len("Name")] # Initial width for the 'Name' columnfor i in range(num_assignments):
max_lengths.append(len(f'Assignment {i+1}'))
max_lengths.extend([len('Average'), len('Letter Grade')])
for student, grades in gradebook.items():
if student == 'Class Average':
continue
max_lengths[0]= max(max_lengths[0], len(student)) # Update name column
for i, grade in enumerate(grades[:num_assignments]): # Exclude Average
max_lengths[i +1]= max(max_lengths[i +1], len(str(grade)))if 'Class Average' in gradebook:
max_lengths[-2]= max(max_lengths[-2], len(f"{gradebook['Class Average']
for student, grades in gradebook.items():
if student == 'Class Average':
continue
avg = grades[-2] # Average
letter_grade = grades[-1] # Letter Grade
max_lengths[-2]= max(max_lengths[-2], len(f"{avg:.2f}"))
max_lengths[-1]= max(max_lengths[-1], len(letter_grade))
return max_lengths def displayGradebook(gradebook):
num_assignments = len(gradebook['Class Average'])
assgnments =[f'Grade {i+1}' for i in range(num_assignments)]
header =["Name"]+ assignments +["Average","Ltter Grade"]
col_widths = determineColumnWidths(gradebook)
print("
GRADE BOOK
")header_row =''.join(f'{header[i]:{col_widths[i]}}' for i in range(len(header)))
print(header_row)for student, grades in gradebook.items():
if student == 'Class Average':
continue
row = f"{student:{col_widths[0]}}"+''.join(f'{grades[i]:{col_widths[i +1]}}' for i in range(len(grades)-2))
row += f'{grades[-2]:-{col_widths[-2]}.2f}{grades[-1]:{col_widths[-1]}}'
print(row)print("
Class Average:")
avg_row = f"{'Class Average':{col_widths[0]}}"+''.join(f'{avg:{col_widths[i +1]}.2f}' for i, avg in enumerate(gradebook['Class Average']))
print (avg_row)def main():
input_filename = 'input_gradebook.csv'
output_filename = 'output_gradebook.csv'
gradebook = readFromFile(input_filename)
gradebook = computeStudentAvg(Gradebook)
gradebook = computeClassAvg (gradebook)
gradebook = computeLetterGrade (gradebook)
displayGradebook(gradebook)
writeToFile(gradebook, output_filename)
if =="":
main()GRADE BOOK
I have snippits of my Python code and the output.

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!