如何编写bmr.py中的st_jeor函数,用多函数模拟Mifflin St Jeor公式?
嘿,我来帮你搞定这个Mifflin St Jeor基础代谢率的函数实现!根据你描述的需求,我整理了完整且健壮的代码,还加了参数校验来避免无效输入的问题:
实现Mifflin St Jeor基础代谢率计算函数
直接把下面的代码放到你的bmr.py文件里就行:
def st_jeor(mass, height, age, sex): # 校验输入参数的合法性,避免无效值导致错误结果 if not isinstance(mass, (int, float)) or mass <= 0: raise ValueError("mass必须是正数,单位为千克") if not isinstance(height, (int, float)) or height <= 0: raise ValueError("height必须是正数,单位为厘米") if not isinstance(age, (int, float)) or age <= 0: raise ValueError("age必须是正数,单位为年") if sex not in ("male", "female"): raise ValueError("sex只能取值为'male'或'female'") # 根据性别确定公式中的S值 s = 5 if sex == "male" else -161 # 套用Mifflin St Jeor公式计算基础代谢率 bmr = 10 * mass + 6.25 * height - 5 * age + s return bmr
代码细节说明:
- 参数校验:我特意加了这部分逻辑,确保用户输入的体重、身高、年龄都是合理的正数,性别也符合指定取值——毕竟如果有人传入负数体重或者拼写错误的性别,函数能直接抛出清晰的错误提示,比默默计算出奇怪的结果要靠谱得多。
- 性别判断:完全按照你说的规则,男性对应
S=+5,女性对应S=-161,用简单的三元表达式实现,简洁易懂。 - 公式计算:严格遵循Mifflin St Jeor的估算公式,直接返回计算出的基础代谢率数值。
测试示例:
你可以用下面的代码验证函数是否正常工作:
# 计算70kg、175cm、30岁男性的基础代谢率 male_bmr = st_jeor(70, 175, 30, "male") # 计算60kg、165cm、28岁女性的基础代谢率 female_bmr = st_jeor(60, 165, 28, "female") print(f"男性基础代谢率: {male_bmr} 卡路里/天") print(f"女性基础代谢率: {female_bmr} 卡路里/天")
如果你之前已经写了部分代码,只需要把参数校验或者公式计算的部分替换进去就行,这个版本的函数既满足需求又足够健壮。
内容的提问来源于stack exchange,提问作者Yungpythonnoob
相关产品推荐
相关产品推荐

