Python课程成绩计算代码问题求助:满分输入结果异常偏低
问题:zyBooks编程题总成绩计算错误排查
我在做zyBooks的编程题,现有一个三门权重相同的考试计算总成绩的示例程序,之后有三个编程任务,前两题已经完成,但第三题计算课程总成绩时,输入所有满分后结果仅为2.7,远低于预期,附上代码求排查错误。
示例程序
exam1_grade = float(input('Enter score on Exam 1 (out of 100):\n')) exam2_grade = float(input('Enter score on Exam 2 (out of 100):\n')) exam3_grade = float(input('Enter score on Exam 3 (out of 100):\n')) overall_grade = (exam1_grade + exam2_grade + exam3_grade) / 3 print('Your overall grade is:', overall_grade)
第三题要求
计算课程总成绩,规则如下:
- 3门满分100分的考试占总成绩的60%
- 4门满分50分的编程作业占总成绩的40%
- 计算公式:
0.6*averageExamScore + 0.4*averageProgScore,其中averageExamScore是3门考试的平均分(转换为0-1的比例),averageProgScore是4门作业的平均分(转换为0-1的比例)
我的代码
exam2_grade = float(input('Enter score on Exam 2 (out of 100):\n')) exam3_grade = float(input('Enter score on Exam 3 (out of 100):\n')) overall_grade = (exam1_grade + exam2_grade + exam3_grade) / 3 print('Your overall grade is:', overall_grade) assignment1_grade = int(input('Enter score on Assignment 1 (out of 50):\n')) assignment2_grade = int(input('Enter score on Assignment 2 (out of 50):\n')) assignment3_grade = int(input('Enter score on Assignment 3 (out of 50):\n')) assignment4_grade = int(input('Enter score on Assignment 4 (out of 50):\n')) assignment1_prc = (assignment1_grade / 50) assignment2_prc = (assignment2_grade / 50) assignment3_prc = (assignment3_grade / 50) assignment4_prc = (assignment4_grade / 50) overall_avg = (((assignment1_prc + assignment2_prc + assignment3_prc + assignment4_prc) / 4) * 100) print('Your overall grade is:', overall_avg) assignment1_grade = int(input('Enter score on Assignment 1 (out of 50):\n')) assignment2_grade = int(input('Enter score on Assignment 2 (out of 50):\n')) assignment3_grade = int(input('Enter score on Assignment 3 (out of 75):\n')) assignment4_grade = int(input('Enter score on Assignment 4 (out of 75):\n')) assignment1_prc = (assignment1_grade / 50) assignment2_prc = (assignment2_grade / 50) assignment3_prc = (assignment3_grade / 75) assignment4_prc = (assignment4_grade / 75) overall_avg = (((assignment1_prc + assignment2_prc + assignment3_prc + assignment4_prc) / 4) * 100) print('Your overall grade is:', overall_avg) exam1_grade = int(input('Enter score on Exam 1 (out of 100):\n')) exam2_grade = int(input('Enter score on Exam 2 (out of 100):\n')) exam3_grade = int(input('Enter score on Exam 3 (out of 100):\n')) assignment1_grade = int(input('Enter score on Assignment 1 (out of 50):\n')) assignment2_grade = int(input('Enter score on Assignment 2 (out of 50):\n')) assignment3_grade = int(input('Enter score on Assignment 3 (out of 50):\n')) assignment4_grade = int(input('Enter score on Assignment 4 (out of 50):\n')) exam1_prc = exam1_grade / 100 exam2_prc = exam2_grade / 100 exam3_prc = exam3_grade / 100 assignment1_prc = assignment1_grade / 50 assignment2_prc = assignment2_grade / 50 assignment3_prc = assignment3_grade / 50 assignment4_prc = assignment4_grade / 50 averageExamScore = (exam1_prc + exam2_prc + exam3_prc / 3) averageProgScore = (assignment1_prc + assignment2_prc + assignment3_prc + assignment4_prc / 4) overall_avg = ((0.6 * averageExamScore) + (0.4 * averageProgScore)) print('Your overall grade is', overall_avg)
错误分析与修正
核心错误
计算平均分的括号位置错误,导致运算优先级出错:
- 原代码中
averageExamScore = (exam1_prc + exam2_prc + exam3_prc / 3)实际计算的是exam1_prc + exam2_prc + (exam3_prc/3),而非三门分数之和除以3 - 同理,
averageProgScore = (assignment1_prc + assignment2_prc + assignment3_prc + assignment4_prc / 4)计算的是前三门作业比例加第四门的1/4,而非四门之和除以4
当所有成绩都是满分时:
exam1_prc、exam2_prc、exam3_prc都是1.0,错误计算的averageExamScore = 1+1+1/3 ≈ 2.333- 作业的四个
prc都是1.0,错误计算的averageProgScore = 1+1+1+1/4 = 3.25 - 代入公式得到
0.6*2.333 + 0.4*3.25 ≈ 1.4 + 1.3 = 2.7,这就是你得到错误结果的原因
修正后的代码(仅保留第三题相关逻辑,移除前两题冗余代码)
# 输入三门考试成绩 exam1_grade = int(input('Enter score on Exam 1 (out of 100):\n')) exam2_grade = int(input('Enter score on Exam 2 (out of 100):\n')) exam3_grade = int(input('Enter score on Exam 3 (out of 100):\n')) # 输入四门编程作业成绩 assignment1_grade = int(input('Enter score on Assignment 1 (out of 50):\n')) assignment2_grade = int(input('Enter score on Assignment 2 (out of 50):\n')) assignment3_grade = int(input('Enter score on Assignment 3 (out of 50):\n')) assignment4_grade = int(input('Enter score on Assignment 4 (out of 50):\n')) # 计算考试的平均比例(0-1) exam_avg = (exam1_grade + exam2_grade + exam3_grade) / (100 * 3) # 计算作业的平均比例(0-1) assignment_avg = (assignment1_grade + assignment2_grade + assignment3_grade + assignment4_grade) / (50 * 4) # 计算最终总成绩 overall_grade = 0.6 * exam_avg + 0.4 * assignment_avg print('Your overall grade is', overall_grade)
当输入所有满分时,exam_avg和assignment_avg都是1.0,最终结果为0.6*1 + 0.4*1 = 1.0,符合预期。
内容的提问来源于stack exchange,提问作者Hchester
相关产品推荐
相关产品推荐

