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

 

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