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

MOOC 2025 Python课程评分编程题输出不符问题求助

问题排查与修正

核心错误分析

1. 习题点数计算逻辑完全偏离题目规则

题目明确:总习题40道,完成至少10%(4道)得1分,至少20%(8道)得2分……完成100%(40道)得10分。但现有代码用ex_pt = exer_nmbr // 10,还错误添加if ex_pt >=4: ex_pt=10,导致计算完全错误:

  • jaana完成27道习题,按规则应得6分(27≥24,对应60%比例),但代码计算为2分,最终总分2+11=13,低于15阈值,返回0分,与预期不符。
  • liisa完成35道习题,按规则应得8分(35≥32,对应80%比例),代码计算为3分,最终总分3+14=17,返回1分,与预期不符。

正确的计算逻辑应为:用完成的习题数除以4(40道的10%为4道),取整数部分,且上限为10:

ex_pt = min(exer_nmbr // 4, 10)

2. 文件读取存在语法错误

代码中line.split(";").strip()是错误写法——split(";")返回列表,列表没有strip()方法,会触发AttributeError。正确写法是先对整行去除首尾空白,再分割:

line_content = [word.strip() for word in line.strip().split(";")]

修正后的完整代码

# write your solution here
def get_student_matrix(filename: str):
    student_matrix = {}
    with open(filename) as new_file:
        for line in new_file:
            line_content = [word.strip() for word in line.strip().split(";")]
            if line_content[0] != "id":
                student_matrix[line_content[0]] = f"{line_content[1]} {line_content[2]}"
    return student_matrix


def get_exercise_matrix(filename: str):
    exercise_matrix = {}
    with open(filename) as new_file:
        for line in new_file:
            line_content = [word.strip() for word in line.strip().split(";")]
            if line_content[0] != "id":
                exercise_matrix[line_content[0]] = sum([int(w) for w in line_content[1:]])
    return exercise_matrix


def get_exam_points_matrix(filename: str):
    exam_points_matrix = {}
    with open(filename) as new_file:
        for line in new_file:
            line_content = [word.strip() for word in line.strip().split(";")]
            if line_content[0] != "id":
                exam_points_matrix[line_content[0]] = sum([int(w) for w in line_content[1:]])
    return exam_points_matrix


def grade(exer_nmbr: int, exm_pt: int) -> int:
    # 修正习题点数计算逻辑
    ex_pt = min(exer_nmbr // 4, 10)
    ex_pt = max(ex_pt, 0)  # 确保最低为0分
    points = ex_pt + exm_pt

    if points < 15:
        return 0
    if 15 <= points <= 17:
        return 1
    if 18 <= points <= 20:
        return 2
    if 21 <= points <= 23:
        return 3
    if 24 <= points <= 27:
        return 4
    return 5


def main():
    if False:
        # user input
        student_info = input("Student information: ")
        exercise_data = input("Exercises completed: ")
        exam_info = input("Exam points: ")
    else:
        # hard-coded input
        student_info = "students1.csv"
        exercise_data = "exercises1.csv"
        exam_info = "exam_points1.csv"

    students = get_student_matrix(student_info)
    exercises = get_exercise_matrix(exercise_data)
    exam_points = get_exam_points_matrix(exam_info)

    for student in students:
        if (student in exam_points) and (student in exercises):
            print(f"{students[student]} {grade(exercises[student], exam_points[student])}")


main()

验证结果

运行修正后的代码,输出与题目预期完全一致:

pekka peloton 0
jaana javanainen 1
liisa virtanen 3

内容的提问来源于stack exchange,提问作者TheSelfTaughtNoob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 01:20:55