这一章我们实现男子和女子体型的评定,原始数据是身高、体重或者体脂百分比。作为军人,达到体型合格是基本要求,也是军人形象气质的基础,相关规定:体型合格就不用考虑单项不合格的情况,只看通用训练科目成绩总分;体型不合格,就不能再有单项不及格的情况,若有单项不及格,不管总分多少,直接总评不合格。
一、基本情况
BMI指数(Body Mass Index,简称BMI),身体质量指数,是用体重千克数除以身高米数的平方得出的数字,是国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。当我们需要比较及分析一个人体的体重对于不同高度的人所带来的健康影响时,BMI值是一个中立而可靠的指标。
计算公式为:BMI=体重(千克)除以身高(米)的平方。
通过分析下表,只要对Excel表里的原始身高、体重值进行计算,看BMI值是否满足下表BMI的范围的要求,就能得知体型是否合格。若BMI指数不合格,再进一步采用体脂百分比评定。
男子BMI指数表
女子BMI指数表
男女体脂表
所以录入Excel表中的标准只需要BMI、PBF的范围大小值即可,且各年龄段的最小值是相同的:
体型录入
同样,通过Python的openpyxl模块读取标准表中的数据,得到BMI、PBF的范围大小值即可。
二、代码实现
原始成绩登记表
1.男子和女子体型计算写成了一个带性别参数的类,文件名为bodily_form.py,根据性别参数,读取工作簿上不同区域的标准数据。方法bodilyform_score_computing()有3个参数,年龄、BMI指数、体脂百分比,返回“合格”或者“不合格”。
# 男子女子体型的计算
# 从工作表“体型标准”中读取数据
import openpyxl
class BodilyForm:
def __init__(self, gender):
self.gender = gender # 性别
wb = openpyxl.load_workbook('通用训练课目考核成绩计算.xlsx')
body_type = wb['体型标准']
if self.gender == '男':
self.lowest_BMI = body_type['A3'].value # 最低身体质量指数
self.age24_BMI = body_type['B3'].value # 24岁以下,最高身体质量指数
self.age25_29_BMI = body_type['C3'].value # 25~29岁,最高身体质量指数
self.age30_39_BMI = body_type['D3'].value
self.age40_49_BMI = body_type['E3'].value
self.age50_59_BMI = body_type['F3'].value
# print(self.lowest_BMI,self.age24_BMI,self.age25_29_BMI,self.age30_39_BMI,self.age40_49_BMI,
# self.age50_59_BMI)
self.lowest_PBF = body_type['A11'].value # 最低体脂比
self.age24_PBF = body_type['B11'].value # 24岁以下,最高体脂比
self.age25_29_PBF = body_type['C11'].value # 25~29岁,最高体脂比
self.age30_39_PBF = body_type['D11'].value
self.age40_49_PBF = body_type['E11'].valu