# -*- coding: UTF-8 -*-
# coding by JasonChow
import csv
import pandas as pd
from decimal import Decimal
'''获取体重和身高计算BMI'''
def get_bmi(weight,height):
bmi = Decimal(float(weight) / float(height)**2).quantize(Decimal("0.0"))
return float(bmi)
'''获取BMI指数返回范围情况'''
def get_result(bmi):
if bmi < 18.5:
return '偏瘦'
elif 18.5 <= bmi < 24:
return '正常'
elif 24 <= bmi < 28:
return '偏胖'
else:
return '肥胖'
def value_check(stu_dict):
while not 0.5<float(stu_dict['身高'])<2.5 or not 20<float(stu_dict['体重'])<300 or not 50<float(stu_dict['腰围'])<200:
stu_info = list(map(str, input('数据超出范围,0.5<身高<2.5,20<体重<300,50<腰围<200\n').split()))
stu_dict = {'姓名': stu_info[0], '身高': stu_info[1], '体重': stu_info[2], '腰围': stu_info[3], \
'BMI指数': (get_bmi(stu_info[2], stu_info[1]))}
return stu_dict
try:
n = int(input('请输入学生人数')) #接受学生人数
except(ValueError):
print('请输入一个正整数\n')
stu_list=[] #建立列表存储每个学生信息字典
for x in range(n): #对每条输入的信息处理
try:
stu_info = list(map(str,input().split()))
stu_dict = {'姓名':stu_info[0], '身高':stu_info[1], '体重':stu_info[2], '腰围':stu_info[3],\
'BMI指数':(get_bmi(stu_info[2],stu_info[1]))}
stu_dict=value_check(stu_dict)
except (IndexError):
print('请按正确格式输入四个参数(姓名身高体重腰围,如:张三 1.85 105.5 108\n')
else:
stu_dict['分析结果'] = get_result(stu_dict['BMI指数'])
stu_list.append(stu_dict)
stu_list.sort(key=lambda k: (k.get('BMI指数', 0)),reverse=True)
p_columns=['姓名','身高','腰围','BMI指数','分析结果']
raw_list = pd.DataFrame(columns=p_columns,data=stu_list) #把嵌套列表转化为DataFrame对象
raw_list.to_csv('stu_bmi.csv', encoding='gbk') #存储为csv文件
with open('stu_bmi.csv','r') as f: #打开文件
reader = csv.reader(f)
for column in reader: #打印文件
print(column[1:])