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
相关产品推荐
相关产品推荐

