python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python自动评分系统

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

作者:IT小本本

这篇文章主要为大家详细介绍了如何基于Python编写一个自动评分系统,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

前言

前天朋友找我帮忙。

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

流程很常见:

听起来很简单。

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

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

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

他们的统计方式是:

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

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

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

excel数据样例:

一、比赛评分的经典规则

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

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

举个例子。

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

排序之后:61 83 83 96 98

去掉:

剩下:83 83 96

平均分:87.333

这就是最终成绩。

二、如果用 Excel 手动算

如果只有 10 个选手

问题不大。

但如果是:

你需要:

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

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

三、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 + 人工统计

但只要写一个 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自动评分系统内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文