python学习笔记(BMR计算器)

每天30min学习python—RBM计算器

目录

  1. BMR计算器1.0
  2. BMR计算器2.0+3.0
  3. BMR计算器4.0

1.0 实现功能

  • 计算基础代谢率

知识点:计算公式

  • BMR(男) = (13.7 *体重(kg)) + (5.0 * 身高(cm))- (6.8 *年龄) + 66

  • BMR(女) = (9.6 *体重(kg)) + (1.8 * 身高(cm))- (4.7 *年龄) + 655

  • 常用数值类型

    • 整型int()
    • 浮点型float()

代码区:

"""
    作者:Troublemaker
    功能:BRM计算器
    版本:1.0
    日期:2019/9/17 21:19
    脚本:1.0.py
"""


def main():
    """
        主函数
    """
    print("请输入你的体重(KG),身高(cm),年龄,性别(输完一个按回车)")
    user_input_weight = float(input())
    user_input_height = float(input())
    user_input_age = int(input())
    user_input_gender = input("men or women")

    # 判断并计算RMB的值
    if user_input_gender == "men":
        rbm = (13.7 * user_input_weight) + (5.0 * user_input_height) - (6.8 * user_input_age) + 66
    elif user_input_gender == "women":
        rbm = (9.6 * user_input_weight) + (1.8 * user_input_height) - (4.7 * user_input_age) + 655
    else:
        rbm = 1

    # 根据计算的PBM值,再进行相应的输出
    if rbm != 1:
        print("您的性别为{},体重为{}kg,身高为{}cm,年龄为{}岁,RMB为{}"
              .format(user_input_gender, user_input_weight, user_input_height, user_input_age, rbm))
    else:
        print("对不起,您输入的信息有误")


if __name__ == "__main__":
    main()

2.0+3.0 实现功能

  • RMB计算器
  • 2.0新增:根据程序输入计算RMB,程序持续运行
  • 3.0新增:用户可以在一行输入所有的信息,输出的时候带单位

知识点:

  • 针对2.0 利用while循环,确保程序在用户想要运行的时候永不停止
  • 针对3.0 对字符串进行操作str.split()str.format()
字符串分割
  • str.split(sep=None,maxsplit=-1)[n]
    • sep是一个界定符,默认为空,默认为所有的空字符,包括空格、换行(\n)、制表符(\t)等会用进行分隔。
    • maxsplit默认为-1,即分割所有,maxsplit可以通俗的理解为分隔次数,假如maxsplit=1,一个str被分割了一次,得到的元素为maxsplit + 1 个(2个)。
    • [n] 表示取第n片
示例代码:
a="1,2,3,4"  # 假设a为做左边这个字符串
a.split()    # 用split进行分割,都为默认值(默认里没有逗号)
Out[3]: ['1,2,3,4'] # 
type(a.split())
Out[4]: list   # 分隔后的类型为list型
    
a.split(' ') # 用空格进行分隔,由于字符串中没有空格,
Out[5]: ['1,2,3,4']

a.split(',') # 用逗号进行分隔,由于字符串中没有空格,
Out[6]: ['1', '2', '3', '4']  # 即全部分隔(这里的逗号只是表明,分成了4份)
    
a.split(',', 1)  # 此时maxsplit=1,分隔后的元素为2
Out[11]: ['1', '2,3,4'] 

a.split(',', 1)[0]  # 取list中第一个元素
Out[12]: '1'
a.split(',', 1)[1]  # 取list中第一个元素
Out[13]: '2,3,4'
     
字符串格式化输出,使用{}占位
  • str.format()
示例代码:
"{}kg,{}cm".format(70,175) # 占位符{}中没有索引,则按顺序
Out[2]: '70kg,175cm'

"{0}kg,{1}cm,{0}kg,{0}kg,{1}cm".format(70,175)
# 占位符中有索引,则按对应索引顺序
Out[3]: '70kg,175cm,70kg,70kg,175cm'


代码区:

"""
    作者:Troublemaker
    功能:BRM计算器
    版本:2.0+3.0
    日期:2019/9/19 20:11
    脚本:2.0_and_3.0.py
    2.0新增:根据程序输入计算RMB,程序持续运行
    3.0新增:用户可以在一行输入所有的信息,输出的时候带单位
"""


def main():
    """
        主函数
    """
    print("请按顺序输入你的体重(KG),身高(cm),年龄,性别(输入'men'or'women')")
    print("注意:用空格进行分隔,且不带单位")
    print("当输入:'quit'时程序退出")
    input_msg = input("请开始输入:")
    
    # while 循环
    while input_msg != 'quit':
        # 用空格对str进行分割
        split_msg = input_msg.split(" ")
        # 第一个元素为体重
        user_input_weight = float(split_msg[0])
        # 第二个元素为身高
        user_input_height = float(split_msg[1])
        # 第三个元素为年龄
        user_input_age = int(split_msg[2])
        # 第四个元素为性别
        user_input_gender = split_msg[3]

        # 判断并计算RMB的值
        if user_input_gender == "men":
            rbm = (13.7 * user_input_weight) + (5.0 * user_input_height) - (6.8 * user_input_age) + 66
        elif user_input_gender == "women":
            rbm = (9.6 * user_input_weight) + (1.8 * user_input_height) - (4.7 * user_input_age) + 655
        else:
            rbm = 1

        # 根据计算的PBM值,再进行相应的输出
        if rbm != 1:
            print("您的性别为{},体重为{}kg,身高为{}cm,年龄为{}岁,RMB为{}"
                  .format(user_input_gender, user_input_weight, user_input_height, user_input_age, rbm))
        else:
            print("对不起,您输入的信息有误")

        # 避免死循环
        input_msg = input("请开始输入:")


if __name__ == "__main__":
    main()

4.0 功能实现

  • RMB计算器
  • 4.0新增:处理异常操作
  • 课后练习:将程序模块化,计算部分封装到函数中

知识点:异常处理机制

  • 异常处理的语法结构
try#当python遇到try语句,先尝试执行try包含的代码
	<body>                       
except <ErrorTypel>:             # 如果没有错误发生,执行try—except后面的语句
	<handler1>
except <ErrorType2>:             # 如果发生错误,python寻找一个符合该错误的异常语句
	<handler2>                   # 然后执行相应的except的处理代码
except:
    <handle0r>

代码区:

"""
    作者:Troublemaker
    功能:RMB计算器
    版本:4.0
    日期:2019/9/19 22:32
    脚本:4.0_and_exercise.py
    4.0新增:处理异常操作
    课后练习:将程序模块化,计算部分封装到函数中
    
"""


def calculate_rbm(user_input_gender, user_input_weight, user_input_height, user_input_age):
    """
        计算rbm的值(封装函数)
    """
    if user_input_gender == "men":
        rbm = (13.7 * user_input_weight) + (5.0 * user_input_height) - (6.8 * user_input_age) + 66
    elif user_input_gender == "women":
        rbm = (9.6 * user_input_weight) + (1.8 * user_input_height) - (4.7 * user_input_age) + 655
    else:
        rbm = 1

    return rbm


def main():
    """
        主函数
    """
    print("请按顺序输入你的体重(KG),身高(cm),年龄,性别(输入'men'or'women')")
    print("注意:用空格进行分隔,且不带单位")
    print("当输入:'quit'时程序退出")
    input_msg = input("请开始输入:")

    # while 循环
    while input_msg != 'quit':
        # 处理异常
        try:
            # 用空格对str进行分割
            split_msg = input_msg.split(" ")
            # 第一个元素为体重
            user_input_weight = float(split_msg[0])
            # 第二个元素为身高
            user_input_height = float(split_msg[1])
            # 第三个元素为年龄
            user_input_age = int(split_msg[2])
            # 第四个元素为性别
            user_input_gender = split_msg[3]

            # 调用函数 计算rbm值
            rbm = calculate_rbm(user_input_gender, user_input_weight, user_input_height, user_input_age)

            # 根据计算的RBM值,再进行相应的输出
            if rbm != 1:
                print("您的性别为{},体重为{}kg,身高为{}cm,年龄为{}岁,RMB为{}"
                      .format(user_input_gender, user_input_weight, user_input_height, user_input_age, rbm))
            else:
                print("对不起,您输入的信息有误")

        # 避免出现红色警告
        except ValueError:
            print("对不起,您输入的信息有误")

        # 避免死循环
        input_msg = input("请开始输入:")


if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值