YB学校体育体测成绩计算(国家学生体质健康标准 2014 修订)
规矩(每次都要遵守)
- 不改原表。 脚本只读老师的成绩表,结果一律另存新文件(原文件名后加「_体测成绩算分结果」,重名自动加 _1、_2),不覆盖任何已有文件。
- 先检查,再算分。 第一次拿到表,先跑
check,用大白话告诉老师:认出了哪些列、各年级男女多少人、哪些格子缺测或像是录错、哪些成绩做了换算(比如 2.15 当成 2.15 米、3.45 当成 3分45秒)。老师确认后再出结果。 - 分数只以脚本为准。 不要心算、不要自己查表改分。脚本说「暂不评定」的学生,就照实说缺了哪项。
- 保护学生隐私。 结果含学生个人成绩,附加页第一行都写着「仅供教师内部使用」。提醒老师不要公开张贴、不要发家长群;不做、也不帮忙做成绩排名或排行榜,老师要排名时说明这个技能不提供,只给班级平均和比例。
- 不联网、不上传。 评分表内置在技能里,全部在本机计算。
- 组件缺了只提示,不自动装。 缺读写 Excel 的组件时,脚本会告诉老师要运行哪条安装命令,由老师自己决定。
- 说话用老师的行话。 一步一步讲,不提命令参数和程序里的名字,只说「按初二算」「1000 米那列」「数据检查页」这样的话;但运行了什么不对老师隐瞒,老师问起就照实说。
- 结果必须主动推到对话里。 算分结果 Excel 生成后,必须用
present_files把文件直接展示在对话里给老师看(不能只说"已生成"就完事);同时用大白话把关键结论(平均分、优良率、及格率、缺测/录错提醒)念一遍。展示后随即运行python "{baseDir}/scripts/release_office_lock.py" "<xlsx路径>"主动释放预览 SDK 占用(缓解补丁3,2026-10-26 定版):present_files会拉起平台预览 SDK(editor_sdk.exe)渲染文件,该进程预览后不释放句柄,导致老师在外用 WPS/Excel 打开时遭遇「文档已被占用 / 只读」;本脚本只结束该预览 SDK 进程、不动wps.exe/ 用户文件 / 生成产物,无占用时为空操作(exit 0),不影响任何其他功能。 - 默认就存在上传文件旁边。 不指定
--out时,结果 Excel 一律存到上传文件所在的同一个文件夹(原文件名后加「_体测成绩算分结果」),不另存到别处;老师明确指定路径才按指定位置存。
用法
脚本:python {baseDir}/scripts/pe_fitness.py <子命令> [选项],路径有空格要加引号。
| 子命令 | 做什么 | 会不会动文件 |
|---|---|---|
check 文件 |
认列、认年级性别、找缺测和录错、列出做过的换算 | 只读,不出文件 |
score 文件 |
算每项得分、加分、学年总分,出数据检查、说明、班级汇总 | 只读原表,另存新 Excel |
lookup --item 项目 --sex 男 --grade 初二 --value 7.8 |
查一个成绩得几分、加几分;BMI 用 --height 身高 --weight 体重 |
不动文件 |
table --item 项目 --sex 女 --grade 高一 |
列出这个年级这个性别这一项的评分表和加分表 | 不动文件 |
template --grade 五年级 --out 路径 |
生成空白体测登记表(按年级列出要测的项目) | 只新建文件,重名加 _1 |
check / score 常用选项:
| 选项 | 意思 |
|---|---|
--grade 三年级 |
表里没有年级列(也没法从班级看出)时,整张表按这个年级算 |
--sex 男 |
表里没有性别列时,整张表按这个性别算 |
--college-year 大一 |
表里只写「大学」时按几年级算(大一大二、大三大四评分表不同) |
--col 50米跑=50m成绩 |
自动认错列时手动指定,左边是项目,右边是表里的列名 |
--custom 我校标准.xlsx |
用老师的自定义评分表覆盖内置表的对应格子 |
--sheet 名称 |
指定工作表;不写用第一个有数据的 |
--out 路径 |
结果保存位置(不能和原表同名) |
项目名可以写:BMI、肺活量、50米跑、坐位体前屈、一分钟跳绳、立定跳远、一分钟仰卧起坐、引体向上、50米×8往返跑、1000米跑、800米跑(「跳绳」「1000米」「往返跑」这类简称也认)。
老师说大白话 → 怎么做
| 老师说 | 怎么做 |
|---|---|
| 「帮我把这个班的体测成绩算一下」 | 先 check 文件,把检查结果念给老师;老师说可以了再 score 文件 |
| 「表里没写年级,是三年级的」 | 加 --grade 三年级 |
| 「都是男生」「这张是女生的」 | 加 --sex 男 / --sex 女 |
| 「我们是大二的」(表里只写大学) | 加 --college-year 大二 |
| 「初二男生 50 米 7.8 秒几分」 | lookup --item 50米跑 --sex 男 --grade 初二 --value 7.8 |
| 「高一女生 800 米 3 分 40 能及格吗」 | lookup --item 800米跑 --sex 女 --grade 高一 --value 3'40" |
| 「把三年级女生跳绳的评分标准给我看看」 | table --item 一分钟跳绳 --sex 女 --grade 三年级 |
| 「给我一张五年级的体测登记表」 | template --grade 五年级 --out 老师指定的位置\五年级体测登记表.xlsx(没指定位置就问老师存哪) |
| 「50 米那列认错了,应该用『50m 成绩』」 | 加 --col 50米跑=50m成绩 |
| 「我们区用的是自己的标准」 | 请老师按「项目、性别、年级、得分、成绩」五列填一张表,再加 --custom 那张表 |
| 「帮我排个名」「把前十名列出来」 | 说明这个技能不做排名,只给班级平均分和优秀率、优良率、及格率 |
| 「这孩子为什么是暂不评定」 | 看「数据检查」页:缺测、免测或成绩像录错的项目没算分,补测或改正后重新算 |
结果里有什么(四个页面)
- 成绩信息(第一页):老师平时用的那种单页算分表——大标题、四个区块(基本信息|成绩输入区|BMI|项目得分区|综合评定),原始成绩在前、各项目得分和总分在后,一个学生一行,人数不限、格式不变;零星缺项的学生总分按已有项目暂计显示,明细见「数据检查」页。跑步成绩按「分.秒」显示(4.45 就是 4分45秒),BMI 和总分一位小数。年级和男女项目不同时列自动增减(小学没有立定跳远,初中及以上男女项目不同,男引体/1000米、女仰卧起坐/800米)。
- 数据检查:表里缺的列、每个缺测格子、明显录错(如 50 米 3 秒、身高 15 厘米)、认不出的格子,带原表行号和改法。这些格子不算分,该学生总评暂不评定、总分按已有项目暂计;整行都没成绩的标「免体」,不计入比例。
- 说明:评分依据、计算方法、取舍规则、文件出处和生成时间;用了自定义评分表时逐格列出。
- 班级汇总:按班级(没有班级就按年级)统计人数、男女、算出总分人数、缺项计分人数(零星缺项、总分按已有项目暂计)、暂不评定人数、免体人数、平均总分(含缺项学生的暂计总分),优秀/良好/及格/不及格人数与比例(只按完整评定的学生统计);最后一行「全部」合计。只有人数、平均和比例,没有名次。
怎么算(照《标准》原文)
- 各年级测的项目和权重:
- 小学一、二年级:BMI 15%、肺活量 15%、50 米跑 20%、坐位体前屈 30%、一分钟跳绳 20%
- 小学三、四年级:BMI 15%、肺活量 15%、50 米跑 20%、坐位体前屈 20%、一分钟跳绳 20%、一分钟仰卧起坐 10%
- 小学五、六年级:BMI 15%、肺活量 15%、50 米跑 20%、坐位体前屈 10%、一分钟跳绳 10%、一分钟仰卧起坐 20%、50 米×8 往返跑 10%
- 初中、高中、大学:BMI 15%、肺活量 15%、50 米跑 20%、坐位体前屈 10%、立定跳远 10%、引体向上(男)/一分钟仰卧起坐(女)10%、1000 米跑(男)/800 米跑(女)20%
- 单项得分:达到哪一档得哪一档的分,10 分那档都没达到记 0 分。
- 加分:小学一分钟跳绳最多 20 分;初中及以上男生引体向上、1000 米跑,女生一分钟仰卧起坐、800 米跑,各最多 10 分;超过 100 分门槛后按多出的次数或少用的秒数查加分表(官方口径是「比本年级门槛快多少」,各年级自动换算)。
- 学年总分 = 各项得分×权重之和 + 加分(满分 120),保留一位小数;90.0 及以上优秀,80.0~89.9 良好,60.0~79.9 及格,59.9 及以下不及格。
- 取舍规则:跑步类成绩多出的小数一律进位(7.81 秒按 7.9 秒,不给学生放宽);其他项目四舍五入到评分表精度;BMI 四舍五入到一位小数后查表。
- 成绩写法:时间认 3'45"、3′45″、3:45、3分45秒、225(秒)、3.45(当 3分45秒,会在检查里提示);Excel 把 3:45 存成「3 时 45 分」的也按 3分45秒算;50 米认 8.5、8"5、8秒5;立定跳远写 2.15(米)自动换成 215 厘米;身高写 1.52(米)自动换成 152 厘米;体重写「90斤」换成 45 千克。年级认一年级、3年级、七年级、初二、高1、大二、三(2)班,以及国家体测上报用的年级编号 11~16、21~23、31~33、41~44;性别认男/女、1/2。
评分表出处
内置表取自教育部《国家学生体质健康标准(2014年修订)》(教体艺〔2014〕5号)附件的表1-1~表1-16、表2-1~表2-6 和权重表,数据在 references/standard_2014.json。开发时用官方 Word 文件逐格提取并与技能内置表逐格比对(3821 格,0 处不同),官方原文每格留档备查。没有未核对的格子;引体向上部分分档原表本来就空,查分时跳过。详见 references/sources.md。各省市中考体育、地方方案不在内置范围,需要时用自定义评分表覆盖。
需要的组件
- 必须:Python 3.8+、openpyxl(读写 .xlsx 成绩表)、xlrd(读取老版 .xls 成绩表)、psutil(跨平台释放预览占用,见规矩第8条)。
- 缺组件时安装命令:
pip install openpyxl xlrd psutil;技能包内置install.py可一键自动安装并自检。 - 只用 Python 自带功能与以上三个第三方库,不调用任何外部程序、不联网。
不做什么
- 不修改、不覆盖、不删除老师的原表;不在原表里加工作表。
- 不排名次、不出排行榜、不生成可公开张贴的成绩单。
- 不联网、不上传,不调用任何在线服务;不对接任何体测上报平台。
- 不编造评分表:内置表以外的标准(各地中考、学校自定)只用老师提供的自定义表。
- 不判断学生健康状况、不给医疗或训练处方;免测由学校按规定办理。
- 不读老版本 .xls 和 WPS 的 .et 格式(请老师另存为 .xlsx);不破解有密码的文件。