# -*- 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:])