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

Python处理学生答题日志 校验解题数量、题目及得分是否一致

代码实现

以下是符合Pythonic规范的可运行代码:

from collections import defaultdict

logs = ["0001 3 95", "0001 5 90", "0001 5 100", "0002 3 95", "0001 7 80", "0001 8 80",
        "0001 10 90", "0002 10 90", "0002 7 80", "0002 8 80", "0002 5 100", "0003 99 90"]

# 构造学生-题目得分映射,同一学生同题目多次提交默认取最后一次提交的得分
student_problem_scores = defaultdict(dict)
for log in logs:
    stu_id, prob_id, score = log.split()
    student_problem_scores[stu_id][prob_id] = int(score)

# 需求1:统计有效解题数,校验所有学生数量是否一致
valid_counts = {stu_id: len(prob_scores) for stu_id, prob_scores in student_problem_scores.items()}
count_consistent = len(set(valid_counts.values())) == 1
print("各学生有效解题数:", valid_counts)
print("所有学生有效解题数是否一致:", count_consistent)

# 需求2:校验所有学生的题目ID、对应得分是否完全相同
# 排序后转元组是为了消除字典无序的影响,确保内容相同则结构相同
score_patterns = set(tuple(sorted(prob_scores.items())) for prob_scores in student_problem_scores.values())
score_consistent = len(score_patterns) == 1
print("所有学生的已解题目及对应得分是否完全相同:", score_consistent)
运行输出
各学生有效解题数: {'0001': 5, '0002': 5, '0003': 1}
所有学生有效解题数是否一致: False
所有学生的已解题目及对应得分是否完全相同: False
逻辑说明
  • 用defaultdict嵌套字典存储数据,天然处理同学生同题目重复提交的场景,重复提交时直接覆盖旧得分即可,符合有效解题的统计规则
  • 校验数量一致时,将所有有效解题数转成集合,若集合长度为1则所有值相等
  • 校验题目和得分一致时,先将每个学生的题目得分键值对排序后转成可哈希的元组,再转集合去重,集合长度为1则所有学生的题目得分完全一致
  • 若业务要求同一学生同题目多次提交取最高分,只需将赋值逻辑改为student_problem_scores[stu_id][prob_id] = max(int(score), student_problem_scores[stu_id].get(prob_id, 0))即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:36:04