美文网首页
案例(3):BMR计算器

案例(3):BMR计算器

作者: hwang_zhic | 来源:发表于2019-02-12 16:20 被阅读0次

本章通过BMR计算器的4个案例来进行学习基础的Python程序

案例简述

基础代谢率: 我们在安静状态下(通常为静卧状态)小号的最低热量,人的其他活动都建立在这个基础上。计算公式如下:
BMR(男)=(13.7体重(kg))+(5.0身高(cm))-(6.8年龄)+66
BMR(女)=(9.6
体重(kg))+(1.8身高(cm))-( 4.7年龄)+655

v1.0

本节简单的写个基础BMR计算器,通过给定的参数,接着判断性别后代入各自的公式直接得出BMR的值,然后输出结果。
知识点:
1.判断方法:if-else语句的使用
2.数据类型:
(1)整数类型,与数学中的整数概念一致;如:100, -250
(2)浮点数类型,带有小数点及小数的数值;如:0.0, -3.14, 3.4e-3 (科学计数法)
3.类型转换
(1)整数->浮点数,float(4) -> 4.0
(2)浮点数->整数,int(3.14)->3,只会保留整数部分
(3)字符串->浮点数, float/eval(‘3.14’)->3.14
(4)字符串->整数,int(‘3’) ->3 == eval(‘3’) ->3
4.type()函数可以判断数据类型
具体代码如下:

PS:输出时可以对没有结果的情况给出不支持提示

def main():
    """
        主函数
    """
    # 性别
    gender = '男'
    # 体重(kg)
    weight = 60
    # 身高(cm)
    height = 170
    # 年龄
    age = 40
    if gender == '男':
        bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
    elif gender == '女':
        bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
    else:
        bmr = -1

    if bmr != -1:
        print("基础代谢率:", bmr)
    else:
        print("暂不支持该性别")

v2.0

在v1.0的基础上,该案例通过input()函数来支持根据用户输入计算BMR,使用while语句来使程序持续运行。开始和结束循环都可以根据输入实现。PS:input()获得的是字符串类型,需要转换成整数或浮点型才能计算。
知识点:
1.input()函数可以得到输入数据;例子:data = input(“请输入数据:”)
2.while循环语句,当符合条件时进入并执行循环体,否则跳出循环;例子:while a == 1: 循环体
具体代码:

# 是否循环程序
    y_or_n = input("是否退出程序(y/n)")

    while y_or_n != 'y':
        # 性别
        gender = input("请输入性别:")
        # 体重(kg)
        weight = float(input("请输入体重(kg):"))
        # 身高(cm)
        height = float(input("请输入身高(cm):"))
        # 年龄
        age = int(input("请输入年龄:"))
        if gender == '男':
            bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
        elif gender == '女':
            bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
        else:
            bmr = -1
        if bmr != -1:
            print("基础代谢率:", bmr)
        else:
            print("暂不支持该性别")
        print("*******************************")
        y_or_n = input("是否退出程序(y/n)")

    print("程序已退出!")

v3.0

在v2.0的基础上进行修改,用户可以在一行输入所有信息,带单位的信息输出。一行输入所有信息通过字符串分str.split()函数达到效果。带单位信息输出通过str.format()函数。效果分别如下图所示: str.split()效果图
str.format()效果图

知识点:
1.字符串分割,str.split(), 例子: str_list = input_str.split(" ") # 依据空格分割
2.字符串格式化输出,使用{}占位:str.format();例子:‘{}公斤, {}厘米’.format(70, 175)
具体代码:

         # 一行输入数据
        input_str = input("请依次输入性别、体重(kg)、身高(cm)、年龄(空格隔开):")
        # 获取数据,依据空格分割
        str_list = input_str.split(" ")
        # 性别
        gender = str_list[0]
        # 体重
        weight = float(str_list[1])
        # 身高
        height = float(str_list[2])
        # 年龄
        age = int(str_list[3])

        if gender == '男':
            bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
        elif gender == '女':
            bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
        else:
            bmr = -1

        if bmr != -1:
            print("您的性别:{},体重:{}kg,身高:{}cm,年龄:{}岁".format(gender, weight, height, age))
            print("您的基础代谢率:{}卡路里".format(bmr))

v4.0

在v3.0的基础上,新增处理异常操作。方法使用try-except语句实现。
知识点:

1.异常处理机制及语法 语法
2.常用几个错误类型:
(1)序列下标超出了范围:IndexError

(2)字典中找不到某个键:KeyError
(3)输入对象类型有误:TypeError
(4)序列下标超出了范围:IndexError

具体代码:

# 一行输入数据
        input_str = input("请依次输入性别、体重(kg)、身高(cm)、年龄(空格隔开):")
        # 获取数据,依据空格分割
        str_list = input_str.split(" ")
        try:
            gender = str_list[0]  # 性别
            weight = float(str_list[1])  # 体重
            height = float(str_list[2])  # 身高
            age = int(str_list[3])  # 年龄

            if gender == '男':
                bmr = (13.7 * weight) + (5.0 * height) - (6.8 * age) + 66
            elif gender == '女':
                bmr = (9.6 * weight) + (1.8 * height) - (4.7 * age) + 655
            else:
                bmr = -1

            if bmr != -1:
                print("您的性别:{},体重:{}kg,身高:{}cm,年龄:{}岁".format(gender, weight, height,           age))
                print("您的基础代谢率:{}卡路里".format(bmr))
            else:
                print("暂不支持该性别")
        except ValueError:
            print("请输入正确的信息!")
        except IndexError:
            print("输入信息较少!")
        except:
            print("程序异常!")
```序列下标超出了范围:IndexError
# 小结
![小结](https://img.haomeiwen.com/i13541328/0f2d34cd8b6a94fe.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

完整代码查看[码云](https://gitee.com/hwang_zc/Python_learn1/tree/master/BMR)

相关文章

网友评论

      本文标题:案例(3):BMR计算器

      本文链接:https://www.haomeiwen.com/subject/qlrceqtx.html