You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 22:45:01