当前位置:首页>python>跟着菜菜学python--第二题

跟着菜菜学python--第二题

  • 2026-10-11 05:43:08
跟着菜菜学python--第二题
计算BMI并判断体重状况 需要输入一个人的身高(单位为厘米)和体重(单位为千克)。根据输入的身高和体重计算出这个人的BMI值(体重除以身高的平方,身高需先转换为米)。然后,根据计算出的BMI值判断这个人的体重状况。体重状况分为偏瘦(BMI<18.5)、正常(18.5<=BMI<24)、超重(24<=BMI<28)和肥胖(BMI>=28)。
 示例输入:170   65 
示例输出:22.49134948096886   正常。

《BMI计算与体重状况判断》教学设计

一、教学目标

1. 知识与技能

- 掌握Python基本输入输出函数(`input()`、`print()`)

- 掌握数据类型转换(`int()`、`float()`)

- 掌握算术运算符的使用(`+`、`-`、`*`、`/`、`**`)

- 掌握条件判断语句(`if-elif-else`)

- 掌握`map()`函数的使用方法

2. 过程与方法

- 能够分析问题,将数学公式转化为程序代码

- 能够使用条件分支解决多分类问题

- 能够调试和运行Python程序

3. 情感态度与价值观

- 了解BMI指数的健康意义

- 培养健康生活意识

- 体验编程解决实际问题的乐趣

二、教学重难点

 教学重点 

| 1 | 输入数据的接收与转换 | 使用`input()`接收字符串,用`int()`转为数值 |

| 2 | BMI计算公式实现 | `体重 / (身高/100)²` 的正确表达 |

| 3 | 多分支条件判断 | `if-elif-else`的结构和使用 |

教学难点

| 1 | 身高单位转换 | 厘米→米的转换(除以100) |

| 2 | 条件判断的顺序 | 多个条件的逻辑关系与顺序安排 |

| 3 | `map()`函数的理解 | 对输入数据的批量类型转换 |

三、主要知识点

知识点1:输入输出函数

# 输入函数变量 = input("提示信息")        # 返回字符串类型
# 输出函数print(内容1, 内容2, ...)       # 多个内容用空格分隔print(内容1, 内容2, sep='')    # 指定分隔符
name = input("请输入姓名:")print("你好,", name)

知识点2:数据类型转换```python

int(字符串)      # 字符串→整数

float(字符串)    # 字符串→浮点数

str(数值)        # 数值→字符串

**示例:**

a = int("123")     # a = 123b = float("45.6")  # b = 45.6

知识点3:map()函数

python

# 语法:map(函数, 可迭代对象)

a, b = map(int, input().split())

**执行过程:**

输入:170 65

步骤1: input() → "170 65"

步骤2: .split() → ["170", "65"]

步骤3: map(int, ["170", "65"]) → 将每个元素转为整数

步骤4: 赋值 → height_cm=170, weight=65

知识点4:算术运算符

| 运算符 | 功能 | 示例 | 结果 |

|--------|------|------|------|

| `+` | 加法 | `3 + 2` | `5` |

| `-` | 减法 | `5 - 2` | `3` |

| `*` | 乘法 | `3 * 4` | `12` |

| `/` | 除法(浮点) | `10 / 3` | `3.333...` |

| `**` | 幂运算 | `2 ** 3` | `8` |

| `%` | 取余 | `10 % 3` | `1` |

**BMI计算示例:**

height_m = height_cm / 100      # 单位转换bmi = weight / (height_m ** 2)  # BMI公式

 知识点5:条件判断语句

python

if 条件1:

    执行语句1

elif 条件2:

    执行语句2

elif 条件3:

    执行语句3

else:

    执行语句4

执行流程图:

```

开始

  ↓

判断条件1? → 是 → 执行语句1 → 结束

  ↓ 否

判断条件2? → 是 → 执行语句2 → 结束

  ↓ 否

判断条件3? → 是 → 执行语句3 → 结束

  ↓ 否

执行语句4

  ↓

结束

四、重点知识解析

解析1:身高单位转换

**问题:** 为什么要把厘米转换为米?

**答:** BMI的国际标准单位是kg/m²,所以:

- 身高170厘米 = 1.7米

- 转换公式:`身高(米) = 身高(厘米) / 100`

**代码实现:**

height_m = height_cm / 100

解析2:BMI计算公式

**数学公式:**

$$BMI = \frac{体重(kg)}{身高(m)^2}$$

**Python实现:**

```python

# 方法1:使用 **

bmi = weight / (height_m ** 2)

# 方法2:使用乘法

bmi = weight / (height_m * height_m)

# 方法3:使用pow()函数

bmi = weight / pow(height_m, 2)

```

**注意:** 括号不能省略,否则会先计算 `weight / height_m` 再平方,结果错误!

 解析3:多分支判断顺序

**判断标准:**

| 范围 | 状态 |

|------|------|

| BMI < 18.5 | 偏瘦 |

| 18.5 ≤ BMI < 24 | 正常 |

| 24 ≤ BMI < 28 | 超重 |

| BMI ≥ 28 | 肥胖 |

**代码逻辑:**

```python

if bmi < 18.5:          # 先判断最小范围

    status = "偏瘦"

elif bmi < 24:          # 隐含 bmi >= 18.5

    status = "正常"

elif bmi < 28:          # 隐含 bmi >= 24

    status = "超重"

else:                   # 隐含 bmi >= 28

    status = "肥胖"

**为什么这样写?**

- `elif`隐含了上一个条件的否定

- 顺序从小到大,逻辑清晰

- 避免重复判断边界值

**常见错误写法:**

```python

# 错误1:顺序颠倒

if bmi >= 28:

    status = "肥胖"

elif bmi < 18.5:    # 这个条件永远不会执行

    status = "偏瘦"

# 错误2:条件重复

if bmi < 18.5:

    status = "偏瘦"

if bmi >= 18.5 and bmi < 24:  # 可以,但冗余

    status = "正常"

 解析4:输出格式控制

**示例要求:** `22.49134948096886 正常`

**实现方式:**

```python

# 方式1:默认空格分隔

print(bmi, status)        # 输出:22.491... 正常

# 方式2:手动添加空格

print(str(bmi) + " " + status)

# 方式3:格式化输出

print(f"{bmi} {status}")

**注意:** 如果是 `22.491...正常`(无空格),使用:

```python

print(bmi, status, sep='')

六、程序完整讲解

 完整代码

# 步骤1:输入数据height_cm, weight = map(int, input().split())# 步骤2:身高单位转换(厘米→米)height_m = height_cm / 100# 步骤3:计算BMI值bmi = weight / (height_m ** 2)# 步骤4:根据BMI值判断体重状况if bmi < 18.5:    status = "偏瘦"elif bmi < 24:    status = "正常"elif bmi < 28:    status = "超重"else:    status = "肥胖"# 步骤5:输出结果print(bmi, status)

程序执行过程演示

**以输入 `170 65` 为例:**

| 步骤 | 代码 | 变量值 | 说明 |

|------|------|--------|------|

| 1 | `input().split()` | `["170", "65"]` | 接收输入并分割 |

| 2 | `map(int, ...)` | `170, 65` | 转为整数 |

| 3 | `height_cm / 100` | `1.7` | 170cm → 1.7m |

| 4 | `weight / (height_m ** 2)` | `22.491...` | 65 ÷ 1.7² |

| 5 | `if bmi < 18.5` | `False` | 22.49 ≥ 18.5 |

| 6 | `elif bmi < 24` | `True` | 22.49 < 24 |

| 7 | `status = "正常"` | `"正常"` | 赋值状态 |

| 8 | `print(bmi, status)` | 输出结果 | 显示结果 |

程序运行测试

python

# 测试用例1:正常

输入:170 65

输出:22.49134948096886 正常

# 测试用例2:偏瘦

输入:160 45

输出:17.578125 偏瘦

# 测试用例3:超重

输入:170 75

输出:25.951557093425605 超重

# 测试用例4:肥胖

输入:170 90

输出:31.14186851211073 肥胖

# 测试用例5:边界值

输入:170 53.5  # BMI ≈ 18.5

输出:18.5121107266436 正常

七、常见错误与调试

 错误1:忘记类型转换

```python

# 错误

height_cm, weight = input().split()

bmi = weight / (height_cm ** 2)  # TypeError: 字符串不能运算

# 正确

height_cm, weight = map(int, input().split())

错误2:单位忘记转换

```python

# 错误

bmi = weight / (height_cm ** 2)  # 结果会很小(0.022...)

# 正确

height_m = height_cm / 100

bmi = weight / (height_m ** 2)

错误3:条件判断顺序错误

```python

# 错误

if bmi < 24:

    status = "正常"

elif bmi < 18.5:  # 这个条件永远不会执行

    status = "偏瘦"

# 正确

if bmi < 18.5:

    status = "偏瘦"

elif bmi < 24:

    status = "正常"

 错误4:括号使用错误

```python

# 错误

bmi = weight / height_m ** 2  # 等价于 (weight / height_m) ** 2

# 正确

bmi = weight / (height_m ** 2)

八、课后作业

基础题(必做)

**题目1:** 编写程序,输入身高和体重,输出BMI值和体重状况。

```python

# 测试数据

输入:175 70

输出:22.857142857142858 正常

**题目2:** 修改程序,使输出保留两位小数。

```python

# 提示:使用格式化输出

print(f"{bmi:.2f} {status}")

# 输入:170 65

# 输出:22.49 正常

**题目3:** 添加输入提示信息。

```python

height_cm = int(input("请输入身高(厘米):"))

weight = int(input("请输入体重(千克):"))

 提高题(选做)

**题目4:** 同时支持空格分隔和连续输入两种格式。

```python

# 输入格式1:170 65(空格分隔)

# 输入格式2:17065(连续输入)

# 两种都能正确计算

**题目5:** 增加健壮性,处理异常输入。

```python

# 要求:

# 1. 如果输入的不是数字,提示"输入错误"

# 2. 如果身高或体重为负数,提示"数据不合法"

# 3. 如果输入数据不足两个,提示"请输入两个数值"

 拓展题(挑战)

**题目6:** 增加健康建议功能。

python

# 输出示例:

BMI = 22.49 正常

建议:继续保持良好的饮食和运动习惯!

# 不同状态的建议:

偏瘦 → "建议增加营养摄入,适当进行力量训练。"

正常 → "继续保持良好的饮食和运动习惯!"

超重 → "建议控制饮食,增加有氧运动。"

肥胖 → "建议咨询医生,制定科学减重计划。"

**题目7:** 实现多人BMI统计。

```python

# 要求:

# 1. 可以连续输入多人的数据

# 2. 输入"end"结束

# 3. 统计并输出:

#    - 总人数

#    - 各状态人数

#    - 平均BMI值

九、拓展延伸

拓展1:BMI标准的国际差异

| 地区 | 偏瘦 | 正常 | 超重 | 肥胖 |

|------|------|------|------|------|

| 中国标准 | <18.5 | 18.5-23.9 | 24-27.9 | ≥28 |

| WHO标准 | <18.5 | 18.5-24.9 | 25-29.9 | ≥30 |

| 亚洲标准 | <18.5 | 18.5-22.9 | 23-24.9 | ≥25 |

**拓展练习:** 修改程序,支持选择不同标准。

```python

标准 = input("请选择标准(中国/WHO/亚洲):")

if 标准 == "中国":

    # 使用中国标准

elif 标准 == "WHO":

    # 使用WHO标准

else:

    # 使用亚洲标准

拓展2:可视化BMI分布

```python

import matplotlib.pyplot as plt

# 绘制BMI分类区间图

zones = [(0, 18.5, '偏瘦'), (18.5, 24, '正常'), 

         (24, 28, '超重'), (28, 40, '肥胖')]

# ... 绘图代码

拓展3:数据持久化

```python

# 将BMI计算结果保存到文件

with open("bmi_record.txt", "a", encoding="utf-8") as f:

    f.write(f"{日期} 身高:{height_cm}cm 体重:{weight}kg BMI:{bmi:.2f} {status}\n")

 拓展4:BMI与健康的关系

**BMI的局限性:**

1. 不区分肌肉和脂肪(运动员可能BMI偏高但体脂正常)

2. 不反映脂肪分布(腹部脂肪危害更大)

3. 不适用于儿童、孕妇、老年人

**其他健康指标:**

- 体脂率

- 腰围

- 腰臀比

- 内脏脂肪等级

**拓展练习:** 结合腰围指标,给出更全面的健康评估。

十、教学反思

 本节课收获

1. 学生掌握了`input()`、`print()`的基本使用

2. 学生理解了数据类型转换的重要性

3. 学生学会了`if-elif-else`多分支判断

4. 学生能将数学公式转化为程序代码

最新文章

随机文章