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

 更新时间:2026年03月13日 09:29:19   作者:IT小本本  
这篇文章主要为大家详细介绍了如何基于Python编写一个自动评分系统,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

前言

前天朋友找我帮忙。

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

流程很常见:

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

相关文章

  • 详解Python如何利用Pandas与NumPy进行数据清洗

    详解Python如何利用Pandas与NumPy进行数据清洗

    许多数据科学家认为获取和清理数据的初始步骤占工作的 80%,花费大量时间来清理数据集并将它们归结为可以使用的形式。本文将利用 Python 的 Pandas和 NumPy 库来清理数据,需要的可以参考一下
    2022-04-04
  • Python采集某评论区内容的实现示例

    Python采集某评论区内容的实现示例

    本文主要介绍了Python采集某评论区内容的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • 如何修改Jupyter工作路径(已安装Anaconda)

    如何修改Jupyter工作路径(已安装Anaconda)

    这篇文章主要介绍了如何修改Jupyter工作路径问题(已安装Anaconda),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • Python爬虫文件下载图文教程

    Python爬虫文件下载图文教程

    在本篇内容里小编给大家分享的是关于Python爬虫文件下载的相关知识点内容,有需要的朋友们学习下。
    2018-12-12
  • python配置文件写入过程详解

    python配置文件写入过程详解

    这篇文章主要介绍了python配置文件写入过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 使用keras实现Precise, Recall, F1-socre方式

    使用keras实现Precise, Recall, F1-socre方式

    这篇文章主要介绍了使用keras实现Precise, Recall, F1-socre方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python对数组进行反转的方法

    python对数组进行反转的方法

    这篇文章主要介绍了python对数组进行反转的方法,涉及Python中reverse方法的使用技巧,需要的朋友可以参考下
    2015-05-05
  • Python netmiko模块的使用

    Python netmiko模块的使用

    这篇文章主要介绍了Python netmiko模块的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-02-02
  • PyQt5界面无响应的解决方案

    PyQt5界面无响应的解决方案

    如果在主线程执行耗时操作,比如 循环、sleep、wait 异步线程执行 会导致 UI 界面进入无响应状态,我们可以采用以下两种方式异步处理:使用QThread 或 QTimer,本文给大家介绍了PyQt5界面无响应的解决方案,需要的朋友可以参考下
    2024-05-05
  • pandas读取excel时获取读取进度的实现

    pandas读取excel时获取读取进度的实现

    这篇文章主要介绍了pandas读取excel时获取读取进度的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论