查看全课大纲(第 17 / 51 节)
  1. 1.为什么人人都该学点编程?
  2. 2.计算机与程序设计:你的电脑到底在“想”什么?
  3. 3.Python 这门语言,到底有什么魔力?
  4. 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
  5. 5.如何安装一个更强大的代码编辑器?
  6. 6.汇率兑换1.0:你的第一个“钱生钱”小程序
  7. 7.你的第一行代码,藏着哪些秘密?
  8. 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
  9. 9.汇率兑换程序,如何让它“聪明”地判断币种?
  10. 10.汇率兑换程序能一直运行,直到我喊停吗?
  11. 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
  12. 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
  13. 13.怎么用 Python 画一个会动的五角星?
  14. 14.如何让程序自动画出不同大小的五角星?
  15. 15.函数自己调用自己,会发生什么?
  16. 16.用递归画出神奇的分形树
  17. 17.Python 怎么计算你一天躺着不动能消耗多少热量?
  18. 18.如何让程序“活”起来,持续为你服务?
  19. 19.如何让 BMR 计算器更“聪明”?
  20. 20.当程序遇到“不按套路出牌”的用户怎么办?
  21. 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
  22. 22.如何用列表记录每一周的存款?
  23. 23.如何让程序自己数数?—— 用 for 循环解放你的双手
  24. 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
  25. 25.52周存钱挑战:怎么根据日期自动查存款?
  26. 26.Python 怎么判断一年中的第几天?
  27. 27.列表 vs 元组:哪个更适合存储月份天数?
  28. 28.用集合给月份分个队,换个思路算天数
  29. 29.把月份和天数“锁”在一起:用字典给数据配个对
  30. 30.Python 怎么判断密码强弱?
  31. 31.Python 怎么给密码设置“防沉迷”系统?
  32. 32.Python 怎么把密码保存到文件里?
  33. 33.Python 怎么读取文件里的密码?
  34. 34.Python 怎么把密码检查工具“打包”起来?
  35. 35.Python 怎么把文件操作也“打包”起来?
  36. 36.计算机怎么“扔骰子”?——用Python模拟随机事件
  37. 37.如何用 Python 模拟掷两个骰子?
  38. 38.怎么用 Python 把骰子轨迹画出来?
  39. 39.骰子点数分布长啥样?用直方图一眼看穿!
  40. 40.用科学计算库让骰子程序“起飞”
  41. 41.空气质量指数怎么算?手把手教你写一个AQI计算器
  42. 42.空气质量指数计算:从零开始,让程序看懂空气
  43. 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
  44. 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
  45. 45.Python 怎么让程序自己判断文件类型?
  46. 46.如何让程序自己上网查空气质量?
  47. 47.用美味的汤来解析网页:Beautiful Soup 入门
  48. 48.如何让爬虫自动抓取全国所有城市的空气质量?
  49. 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
  50. 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
  51. 51.空气质量数据怎么“洗”干净,还能画成图?

Python 怎么计算你一天躺着不动能消耗多少热量?

约 19 分钟

小象实战讲义 · Python 入门:8 个小项目边玩边学

想不想知道,即使你躺平一整天,身体也会默默消耗多少热量?这个神奇的数字叫做“基础代谢率”(BMR),它是健身、减肥时调整饮食和运动量的重要参考。今天,我们就用 Python 来打造一个专属的 BMR 计算器!学完这一节,你就能输入自己的性别、身高、体重和年龄,立刻算出你的“躺平”热量消耗,是不是很酷?

💡 核心导读

  • 项目目标:制作一个能根据性别、身高、体重、年龄计算基础代谢率的程序。
  • 核心逻辑:使用 if-elif-else 判断语句,根据性别选择不同的计算公式。
  • 新知解锁:认识 Python 中的数值类型(整数和浮点数),以及它们之间如何转换。
  • 本节增量:我们只做一件事——把计算逻辑写进程序,并理解计算过程中数字的“身份”(类型)。

一、什么是 BMR?为什么需要计算它?

基础代谢率(BMR),简单说,就是你身体在完全安静、躺着不动的情况下,为了维持生命(心跳、呼吸、体温等)所需要消耗的最低热量。

这个数值非常重要:

  • 健身达人用它来精确制定增肌或减脂计划。
  • 普通人了解自己的 BMR,可以更科学地安排每日饮食,避免“吃多了”或“吃少了”。

计算公式(男女不同):

  • 男性:BMR = 13.7 × 体重(kg) + 5.0 × 身高(cm) - 6.8 × 年龄 + 66
  • 女性:BMR = 9.6 × 体重(kg) + 1.8 × 身高(cm) - 4.7 × 年龄 + 655

看,其实就是把几个数字代进公式里算一下。我们的任务,就是让 Python 帮我们完成这个计算。

二、动手之前先“画图”:理清程序思路

写程序就像盖房子,先画图纸。对于这个计算器,我们的“图纸”(流程图)很简单:

  1. 输入:需要用户提供四个信息——性别、体重(kg)、身高(cm)、年龄。
  2. 处理:
    • 判断性别是“男”还是“女”。
    • 根据性别,选择对应的公式进行计算。
    • 如果性别输入既不是“男”也不是“女”,则给出错误提示。
  3. 输出:打印出计算出的 BMR 值(单位:大卡)。

思路清晰了,开写!

三、BMR 计算器 1.0 版:先让程序跑起来

我们先不急着让用户输入,而是把数据“写死”在程序里。这样做的好处是,可以快速验证我们的计算逻辑是否正确。

"""
作者:小象教研组
功能:BMR计算器
版本:1.0
"""

# 我们把输入数据直接写在程序里(先写死)
gender = '男'   # 性别:'男' 或 '女'
weight = 70     # 体重,单位:公斤(kg)
height = 175    # 身高,单位:厘米(cm)
age = 25        # 年龄

# 根据性别选择不同的公式进行计算
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 作为标记
    bmr = -1

# 根据 bmr 的值决定输出什么
if bmr != -1:
    print('您的基础代谢率(BMR)是:', bmr, '大卡')
else:
    print('抱歉,暂不支持该性别的BMR计算。')

运行一下,看看结果:

您的基础代谢率(BMR)是: 1730.0 大卡

太棒了!一个身高175cm、体重70kg的25岁男性,基础代谢率是1730大卡(13.7×70 + 5×175 − 6.8×25 + 66 = 959 + 875 − 170 + 66)。

动手试试:把第一行的 gender = '男' 改成 gender = '女',再运行一次,看看结果会变成多少?

四、🔍 新知解锁:数字的“身份”——数值类型

细心的你可能发现了,上面的代码里,数字的写法有点不一样:有的是 70,有的是 13.7,还有的是 5.0。它们在 Python 眼里,有着不同的“身份”,我们称之为类型。

1. 两种主要的数值类型

  • 整数 (int):像 100, -250, 0 这样,没有小数点的数。
  • 浮点数 (float):像 0.0, -3.14, 5.0 这样,带有小数点的数。科学计数法如 3.4e-3 (表示 3.4×10⁻³) 也是浮点数。

关键区别:5 是整数,5.0 是浮点数。

2. 类型转换:让数字“变身”

有时候我们需要在整数和浮点数之间转换。

# 整数 -> 浮点数:加个 .0
print(float(4))   # 输出:4.0

# 浮点数 -> 整数:只保留整数部分,小数直接"砍掉"
print(int(3.14))  # 输出:3
print(int(9.99))  # 输出:9 (不是四舍五入!)
4.0
3
9

注意:浮点数转整数会丢失精度(小数部分),就像你把 3.14 元当成 3 元花了一样。

3. 混合运算的结果是什么类型?

在我们的公式 13.7 * weight 中,13.7 是浮点数,weight (70) 是整数。它们相乘的结果是什么类型?

result = 13.7 * 70
print(result)          # 输出:959.0 (一个浮点数)
print(type(result))    # 输出:<class 'float'> (用type()函数查看类型)
959.0
<class 'float'>

规则:当整数和浮点数一起运算时,Python 会自动把整数“提升”为浮点数,结果也是浮点数。这样能保证计算的精度。

4. 字符串和数字的互相转换

还记得我们第一节课的汇率计算器吗?用户输入的是字符串(如 "100"),我们要把它变成数字才能计算。

# 字符串 -> 整数/浮点数 (前提是字符串内容看起来像个数字)
money_str = "100"
print(int(money_str))      # 输出:100 (整数)
print(float(money_str))    # 输出:100.0 (浮点数)

pi_str = "3.14"
# print(int(pi_str))       # 这会报错!因为"3.14"不能直接转成整数
print(float(pi_str))       # 输出:3.14 (正确)

# 数字 -> 字符串
num = 42
print(str(num) + " 是一个数字")  # 输出:42 是一个数字
100
100.0
3.14
42 是一个数字

重要提示:把字符串转成数字时,一定要确保字符串的内容是有效的数字格式,否则程序会出错。我们会在后面的版本学习如何处理这种错误。


📝 动手练一练

  1. 类型猜猜看:不运行程序,你能说出下面每个值在 Python 中是什么类型吗?(int, float, str)

    • -5
    • "72.5"
    • 0.0
    • 1e2
    • '100'
  2. 计算与转换:请编写一小段代码,计算表达式 (10 / 3) + 5 的结果,并: a) 直接打印结果。 b) 将结果转换为整数后再打印,观察两者区别。

👉 点击查看参考答案
  1. 类型猜猜看答案:

    • -5 -> int (整数)
    • "72.5" -> str (字符串,因为有引号)
    • 0.0 -> float (浮点数,有小数点)
    • 1e2 -> float (科学计数法表示的浮点数,值为100.0)
    • '100' -> str (字符串,因为有引号)
  2. 计算与转换参考答案:

# 计算表达式
result = (10 / 3) + 5
print("直接结果(浮点数):", result)  # 输出一个很长的浮点数,如 8.333333333333334

# 转换为整数
result_int = int(result)
print("转换为整数后:", result_int)  # 输出:8 (小数部分被直接去掉)
直接结果(浮点数): 8.333333333333334
转换为整数后: 8

本章小结

恭喜!你已经完成了 BMR 计算器的第一个可运行版本。虽然数据是写死的,但核心的计算和判断逻辑已经完整实现了。

📋 行动清单

  • 运行今天的 1.0 版代码,分别计算男性和女性的 BMR,感受 if-elif-else 分支的魅力。
  • 修改代码中的体重、身高、年龄,算算你自己(或朋友)的 BMR。
  • 思考:如果我想让用户自己输入信息,而不是我写在代码里,应该怎么做?(提示:回忆一下第一节课我们用过的某个函数。)

在下一节,我们将为计算器升级到 2.0 版本:让用户通过键盘输入自己的信息,并且可以连续计算多个人的 BMR,直到想退出为止。程序会变得更加互动和实用!

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 第4章代码包:基础代谢率计算(含全部版本 4 个 .py)
    ZIP · 3KB
    下载
看图文没弄懂?展开看本节视频讲解(约 19 分钟)
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)