当前位置: 代码网 > it编程>前端脚本>Python > 基于Python编写一个自动评分系统

基于Python编写一个自动评分系统

2026年03月13日 Python 我要评论
前言前天朋友找我帮忙。他们单位要举办一个年初演讲比赛。流程很常见:5 位评委打分去掉一个最高分去掉一个最低分计算平均分每组选出第一名听起来很简单。但真正执行的时候,事情就变了。负责人给我看了他们的 e

前言

前天朋友找我帮忙。

他们单位要举办一个年初 演讲比赛

流程很常见:

  • 5 位评委打分
  • 去掉一个最高分
  • 去掉一个最低分
  • 计算平均分
  • 每组选出第一名

听起来很简单。

但真正执行的时候,事情就变了。

负责人给我看了他们的 excel。

80 个选手 5 个评委 400 个评分数据

他们的统计方式是:

  • excel 录入分数
  • 手动找最高分
  • 手动找最低分
  • 写公式算平均
  • 再按组排序
  • 找第一名

负责人说:“昨天统计成绩统计到晚上 11 点。”

我看了一眼 excel,说了一句话:

“这事 python 10 秒就能做完。”

excel数据样例:

一、比赛评分的经典规则

很多比赛都会用这个规则:

去掉最高分 + 去掉最低分 + 求平均

举个例子。

选手 张三 的评分:98 83 96 83 61

排序之后:61 83 83 96 98

去掉:

  • 最低分 61
  • 最高分 98

剩下:83 83 96

平均分:87.333

这就是最终成绩。

二、如果用 excel 手动算

如果只有 10 个选手

问题不大。

但如果是:

  • 80 个选手
  • 5 个评委
  • 400 个分数

你需要:

  • 删除最高最低
  • 写公式
  • 排序
  • 找每组第一名

不仅慢,而且 非常容易算错

这也是为什么很多比赛 统计成绩要一两个小时

三、python 解决方案

其实只需要 30 行 python

核心代码:

import pandas as pd

df = pd.read_excel("20260310.xlsx")

score_cols = ["得分1","得分2","得分3","得分4","得分5"]

def calc_valid_score(row):
    scores = sorted(row[score_cols])
    valid_scores = scores[1:-1]
    return sum(valid_scores)/len(valid_scores)

df["最高有效分"] = df.apply(calc_valid_score,axis=1)

这行代码:

scores[1:-1]

直接完成:

去最高分 + 去最低分

四、自动选出每组第一名

python 的 pandas 有一个很强的功能:

groupby

配合:

idxmax

代码:

result = df.loc[df.groupby("组别")["最高有效分"].idxmax(),
                ["姓名","组别","最高有效分"]]

结果:

整个计算过程:

不到 1 秒。

五、再升级:自动排名

只要再加两行代码:

df["组内排名"] = df.groupby("组别")["最高有效分"].rank(ascending=false)
df["总排名"] = df["最高有效分"].rank(ascending=false)

自动生成:

姓名组别得分1得分2得分3得分4得分5最高有效分组内排名总排名
张三a组71727374817339
李四b组606485699672.66666667310
王麦子c组826675636769.33333333415
赵六d组936875839583.6666666714
马七a组666768697068417.5
杨八b组766671936571412.5
候机c组87857161988125
吉士d组996369657168.33333333516
洪七公a组93949596979522
张三三1b组837775798979.6666666716
张三三2c组686764789571312.5
张三三3d组889872646775.6666666728
张三三4a组636465666765520
张三三5b组746265629367519
张三三6c组937986899389.3333333313
张三三7d组846368619271.66666667311
张三三8a组98991001009999.3333333311
张三三9b组786283907177.3333333327
张三三10c组746763629268517.5
张三三11d组668670746570414

所有成绩:

自动计算。

六、一键生成成绩单

再加一行代码:

df.to_excel("比赛成绩统计.xlsx",index=false)

python 会自动生成:

完整成绩表 + 排名表

评委只需要:

  • 填 excel
  • 运行脚本

成绩就出来了。

七、现实中很多单位还在手算

其实很多地方:

比赛评分 考核评分 评委评分

仍然是:

excel + 人工统计

但只要写一个 python 脚本:

以后所有比赛都可以复用。

换一个 excel 文件就能重新计算。

八、全部实现源代码

1、基础版全部代码:

import pandas as pd

# 1. 读取 excel
df = pd.read_excel("20260310.xlsx")

# 2. 计算最高有效分(去掉一个最大和最小)
score_cols = ["得分1", "得分2", "得分3", "得分4", "得分5"]

def calc_valid_score(row):
    scores = sorted(row[score_cols])
    valid_scores = scores[1:-1]  # 去掉最大和最小
    return sum(valid_scores) / len(valid_scores)

df["最高有效分"] = df.apply(calc_valid_score, axis=1)

# 3. 每个组取最高有效分
result = df.loc[df.groupby("组别")["最高有效分"].idxmax(), ["姓名", "组别", "最高有效分"]]

# 4. 保留三位小数
result["最高有效分"] = result["最高有效分"].round(3)

# 5. 输出结果
print(result)

2、升级版全部代码:

import pandas as pd

df = pd.read_excel("20260310.xlsx")

score_cols = ["得分1","得分2","得分3","得分4","得分5"]

def calc_valid_score(row):
    scores = sorted(row[score_cols])
    valid_scores = scores[1:-1]
    return sum(valid_scores)/len(valid_scores)

df["最高有效分"] = df.apply(calc_valid_score,axis=1)

df["组内排名"] = df.groupby("组别")["最高有效分"].rank(ascending=false)
df["总排名"] = df["最高有效分"].rank(ascending=false)

df.to_excel("比赛成绩统计.xlsx",index=false)

print("成绩统计完成")

最后

很多人学 python 的时候都会问:

“python 能干嘛?”

其实答案很简单。

只要是:

  • 重复的
  • 机械的
  • 需要计算的

几乎都可以:

自动化。

当你第一次写出一个脚本,

替代 2 小时人工工作 的时候,

你就会真正理解一句话:编程最大的价值 不是写代码,而是 节省时间。

到此这篇关于基于python编写一个自动评分系统的文章就介绍到这了,更多相关python自动评分系统内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com