Python最终成绩计算函数if分支内print语句不输出问题求助
问题原因
- 遍历逻辑完全错误:主程序每次调用
finalized_grades时,传入的course_grades、exam_grades都是单组成绩的一维列表(比如首次调用传入的是[55,21,30,58,49]),for c in course_grades遍历拿到的是55、21这类整数数值,拿数值和[0]、[1]这类列表做相等判断,永远不会返回True,所以所有if分支都不会执行,内部的print语句自然没有输出。 - 参数使用逻辑错误:主程序每次调用时传入的
course_exam_bonus、exam_bonus都是单个浮点数(比如首次调用传入的是1.0、3.0,不是列表),你代码中写的course_exam_bonus[0]属于对数值类型取下标,一旦触发会直接报错,只是因为if分支从未执行所以没有暴露该问题。 - 初始打印变量错误:开头打印Exams时错误传入了
course_grades,导致输出的考试成绩和平时成绩完全一致,不符合实际情况。 - 总成绩计算逻辑错误:循环计算总成绩时每次都给
total赋值为单元素列表,不会累计生成完整的总成绩列表。
修复方案
不需要修改主程序,仅修改finalized_grades函数的逻辑即可,修复后代码如下:
def finalized_grades(course_grades, exam_grades, course_exam_bonus, exam_bonus): # 直接按传入的系数计算调整后的成绩 adj_course = [x * course_exam_bonus for x in course_grades] adj_exam = [x * exam_bonus for x in exam_grades] # 对应位置相乘计算总成绩 total = [a * b for a, b in zip(adj_course, adj_exam)] # 修复打印逻辑 print('Before update:') print('Coursework = {}'.format(course_grades)) print('Exams = {}'.format(exam_grades)) print('Scale = {}, Bonus = {}'.format(course_exam_bonus, exam_bonus)) print('After update:') print('Coursework = {}'.format(adj_course)) print('Exams = {}'.format(adj_exam)) print('Total = {}'.format(total)) return total
内容的提问来源于stack exchange,提问作者Ahri
相关产品推荐
相关产品推荐

