python程序基礎 bmi計算題

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章