代码报错"float object is not iterable",求作业平均分计算功能修复
问题分析与解决
错误原因很明确:你计算出的assignment_averages是单个浮点数(对应第i个作业的平均分),但后续却用for i, avg_score in assignment_averages:尝试遍历这个浮点数——浮点数不属于可迭代对象,因此抛出float object is not iterable错误。
另外代码还有两处小问题:
- 内层循环的变量名
i和外层循环的i重复,会覆盖外层的索引值 - 注释描述和实际功能不符(注释写的是计算学生平均分,实际要实现的是作业平均分)
修正后的代码如下:
def print_report(students, num_of_assignments): # Prints Scores print("\nFinal grade report:") for student_id, student_info in students.items(): print(f"{student_info['Name']}'s average score was {student_info['Average']:.1f}, letter grade of {student_info['Letter_Grade']}") # Calculates and prints the average score for each assignment (Extra Credit) print("\nAssignment averages: ") for i in range(num_of_assignments): # 计算第i个作业的平均分 assignment_average = sum(student_info["Scores"][i] for student_info in students.values()) / len(students) # 直接打印结果,无需额外循环 print(f"The average for assignment {i+1} was {assignment_average:.1f}, letter grade of {get_letter_grade(assignment_average)}")
关键修改点:
- 移除多余的内层for循环,直接打印单个作业的平均分
- 将变量名改为
assignment_average(单数更贴合每次仅计算一个作业平均分的逻辑) - 作业编号用
i+1,避免显示从0开始的索引(可根据实际编号规则调整) - 修正注释描述,使其匹配实际功能
内容的提问来源于stack exchange,提问作者Dbread
相关产品推荐
相关产品推荐

