这一章我们实现男子和女子仰卧起坐成绩的计算,单位是数值,多少个,全年龄段考核内容都是仰卧起坐,相对简单一点吧。
一、基本情况
通过分析男女仰卧起坐“成绩计算标准表”,发现标准表也只是参照标准表,不是连续的全覆盖。比如标准中24岁以下,只规定了男子仰卧起坐87个的成绩为100分,82个的成绩为95分,那么中间的情况多少分呢?
男子仰卧起坐成绩计算标准表
女子仰卧起坐成绩计算标准表
还是只能是我们根据公平原则去补充,在87个、82个的成绩之间去取平均分,数据量比较小,NO!数据量不算小,也不大,看下图就知道!
男子仰卧起坐补充标准表
女子仰卧起坐补充标准表
这时我也想到3公里测试的原始成绩跨度更大,使用这种手工添加补充的办法已经落后了,不过新算法再酝酿当中,也不复杂。本次我也选择手工计算,补充到成绩计算标准表里,精确到小数点后一位。
同样,通过Python的openpyxl模块读取补充成绩计算标准表中的数据,制成 {原始仰卧起坐成绩:分数} 格式的字典,以供主程序查询出换算成绩,再写入成绩表的对应位置中。
二、代码实现
男女仰卧起坐原始成绩统计表
1.我把计算男子和女子仰卧起坐的文件分开,分别放入单独的模块中,男子的文件命名为situp_male.py。因为男女仰卧起坐读取不同的工作簿中的标准表,分开做也方便。计算函数的原理与前面的文章相同,增加了一项判定,若原始数据类型不是整型,则不执行计算,打印错误。
# 男性仰卧起坐的成绩计算
# 从工作表“男子仰卧起坐标准”中读取数据
import openpyxl
class Situp_male_standard_data():
wb=openpyxl.load_workbook('通用训练课目考核成绩计算.xlsx')
ws_situp_male = wb['男子仰卧起坐标准']
age24={} # 24岁以下,{原始仰卧起坐个数:分数}
age25_27={} # 25~27岁,{原始仰卧起坐个数:分数}
age28_30={}
age31_33={}
age34_36={}
age37_39={}
age40_42 = {} # 40岁以上,{原始仰卧起坐个数:分数}
age43_45 = {} # 43~45岁,{原始仰卧起坐个数:分数}
age46_48 = {}
age49_51 = {}
age52_54 = {}
age55_57 = {}
age58_59 = {}
rngs = ws_situp_male.iter_rows(min_row=3,max_row=49,min_col=1,max_col=24)
# 生成{原始仰卧起坐个数:分数}的字典
for row in rngs:
#print([c.value for c in row])
age24[row[1].value]=row[0].value
age25_27[row[3].value]=row[2].value
age28_30[row[4].value]=row[2].value
age31_33[row[5].value]=row[2].value
age34_36[row[7].value]=row[6].value
age37_39[row[9].value] = row[8].value
age40_42[row[11].value] = row[10].value
age43_45[row[13].value] = row[12].value
age46_48[row[15].value] = row[14].value
age49_51[row[17].value] = row[16].value
age52_54[row[19].value] = row[18].value
age55_57[row[21].value] = row[20].value
age58_59[row[23].value] = row[22].value
# print('-----age24-----') # 打印数据以便检查
# for m in age24.items():
# print(m)
# print('-----age25_27-----')
# for m in age25_27.items():
# print(m)
# print('-----age28_30-----')
# for m in age28_30.items():
# print(m)
# print('-----age31_33-----')
# for m in age31_33.items():
# print(m)
# print('-----age34_36-----')
# for m in age34_36.items():
# print(m)
# print('-----age37_39-----')
# for m in age37_39.items():
# print(m)
# print('-----age40_42-----') # 打印数据以便检查
# for m in age40_42.items():
# print(m)
#