Question: My output is wrong, what do I change? import csv def readFromFile ( gradebook ) : gradebook = { } with open ( gradebook

My output is wrong, what do I change?
import csv
def readFromFile(gradebook):
gradebook ={}
with open("gradebook.csv","r") as file:
reader = csv.reader(file)
header = next(reader) # Skip the header row
for row in reader:
student_name = row[0]
grades =[int(grade) for grade in row[1:]]
gradebook[student_name]= grades
return gradebook
def computeStudentAvg(gradebook):
for student, grades in gradebook.items():
avg = sum(grades)/ len(grades) if grades else 0
gradebook[student].append(avg)
return gradebook
def computeClassAvg(gradebook):
num_students = len(gradebook)
if num_students ==0:
return gradebook
num_assignments = len(next(iter(gradebook.values())))
class_avg =[0]* num_assignments
for grades in gradebook.values():
for i in range(num_assignments):
class_avg[i]+= grades[i]
class_avg =[avg / num_students for avg in class_avg]
gradebook['Class Average']= class_avg
return gradebook
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 gradebook
def writeToFile(gradebook, output_filename):
num_assignments = len(gradebook['Class Average'])
assignments =[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' column
for 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))
for i, grade in enumerate(grades[:num_assignments]):
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'][0]:.2f}"))
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'])
assignments =[f'Grade {i+1}' for i in range(num_assignments)]
header =["Name"]+ assignments +["Average", "Letter 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)
displapyGradebook(gradebook)
writeToFile(gradebook, output_filename)
if __name__=="__main__":
main()GRADE BOOK
My output is wrong, what do I change? import csv

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!