基础代谢率计算/基础代谢率计算(2)

去社区提问

简介:基础代谢率计算器新增用户输入和持续执行功能。

案例描述

欢迎来到今天的课堂~本节课我们一起来完成基础代谢率计算小程序的2.0版本。

上个版本中性别、身高、体重等信息都是固定在程序中的,没有实现和用户的交互,今天这节课我们将新增:
1.用户输入的功能;
2.加入循环让程序能够持续运行,直到用户选择结束时退出。

本节课要用到两个重点知识

  • 数据类型转换

  • while循环

这两项内容你都不陌生,都是我们的‘老朋友’,今天再见面希望你能加深与他们的关系,温故而知新,巩固提高~

下面就正式进入案例分析环节吧。

案例分析

先来整理大致思路:

  1. 用户选择是否退出程序,是则退出,否则执行步骤2
  2. 用户输入性别、体重、身高、年龄信息
  3. 根据步骤2输入的内容计算BMR,输出结果。返回步骤1

用一个流程图来更清晰地展示程序执行步骤。

以后写程序之前你也可以像我一样,先整理大致思路,画出流程图,在写程序时能够更清楚地知道每个步骤应该如何实现。

从流程图和前面的文字描述中可以看出今天要写的这段程序是一个循环往复,需要不段重复执行的内容,我们先来复习一下循环必要的两点条件:

  • 循环判定条件
  • 循环体内的执行操作

显然循环体内的操作就是上节课已经完成的判断用户性别,带入公式计算BMR值。但上节课的几个变量值是写好的,用户并不能手动输入。

第一步我们先把原本固定的性别、体重等信息改写为支持用户手动输入。

这里就要用到连接现实世界与代码世界的大门——input()函数。它和print()函数分别承担了输入和输出两个重要功能。

print()函数的使用方法:在括号中放入待打印的内容,计算机就会在屏幕上打印出结果,在课程中我们已经反复实操练习过,相信你一定非常熟悉啦~

input()函数的括号中写入的是提示语,内容需要从用户从键盘输入,通常需要使用一个变量来接收用户输入的信息。

下面就设置四个变量来接收用户关于BMR计算用到的信息:

  1. gender = input('请输入性别(男/女):')
  2. weight = input('请输入体重(kg):')
  3. height = input('请输入身高(cm):')
  4. age = input('请输入年龄:')

input()函数输入的信息都是字符串类型,使用type()函数可以来验证一下。

  1. gender = input('请输入性别(男/女):')
  2. print(type(gender))
  3. weight = input('请输入体重(kg):')
  4. print(type(weight))
  5. height = input('请输入身高(cm):')
  6. print(type(height))
  7. age = input('请输入年龄:')
  8. print(type(age))

从打印结果可以看出,上面的四个变量都是字符串类型。但在计算BMR值时,要求使用数字类型代入公式。要解决这个问题就要用到上节课学习过的类型转换

方法也非常简单,给变量穿上‘衣服’就能够实现啦,来复习一下。

整型的’衣服’是int()

浮点型的’衣服’是float()

字符串类型的’衣服’是str()

例如把体重转换为浮点数,就可以像下面这样来完成:

  1. weight = float(input('请输入体重(kg):'))

同理也可以完成其它几个变量的类型转换,再把后面的条件语句补充完整,就给上节课的基础代谢率计算程序增添了用户输入的功能。

  1. #输入信息
  2. gender = input('请输入性别(男/女):')
  3. weight = float(input('请输入体重(kg):'))
  4. height = float(input('请输入身高(cm):'))
  5. age = int(input('请输入年龄:'))
  6. #计算BMR值
  7. if gender == '男':
  8. BMR=13.7*weight+5.0*height-6.8*age+66
  9. elif gender == '女':
  10. BMR=9.7*weight+1.8*height-4.7*age+665
  11. else:
  12. BMR=-1
  13. #输出结果
  14. if BMR == -1:
  15. print('输入的性别有误')
  16. else:
  17. print('您的BMR值是:',BMR)

循环体内的执行内容完工,下面再来讨论进入循环的判断条件。

进入循环需要一个判定条件,当满足条件时,才能进入循环体,执行里面的操作。在这个案例中,循环判定条件是:用户不选择退出。首先需要用户输入决策,并用一个变量来接收决策结果。

  1. y_or_no = input('是否选择退出?(y/n):')

进入循环的条件是:用户不选择退出,即变量y_or_no不等于y。Python中不等于号是!=

  1. while y_or_no != 'y':

确定了循环判定条件,接下来就需要把循环体的内容补充完整。别忘记缩进哦~

现在我们完成的代码长这个样子,来执行看看效果:

  1. y_or_no = input('是否选择退出?(y/n):')
  2. while y_or_no != 'y':
  3. gender = input('请输入性别(男/女):')
  4. weight = float(input('请输入体重(kg):'))
  5. height = float(input('请输入身高(cm):'))
  6. age = int(input('请输入年龄:'))
  7. #计算BMR值
  8. if gender == '男':
  9. BMR=13.7*weight+5.0*height-6.8*age+66
  10. elif gender == '女':
  11. BMR=9.7*weight+1.8*height-4.7*age+665
  12. else:
  13. BMR=-1
  14. #输出结果
  15. if BMR == -1:
  16. print('输入的性别有误')
  17. else:
  18. print('您的BMR值是:',BMR)

惊奇地发现,程序进入了死循环。好像在第一次讲while循环的时候就遭遇过同样的问题,历史再一次重演了。

当第一次输入为‘n’,用户不选择退出时,满足循环条件,进入循环,计算BMR值。但计算完成后,变量y_or_no的值没有做改变,依然是n,满足循环条件,再次进入循环。如此反复下去,就看到了死循环状态。

到底问题出在了哪里?

答案就是计算BMR值后,没有让用户重新选择是否要退出程序,修改变量y_or_no的值。解决的方法也非常简单,只需要在循环中再次提示用户输入就可以啦。

再来运行结果看看~

  1. y_or_no = input('是否选择退出?(y/n):')
  2. while y_or_no != 'y':
  3. gender = input('请输入性别(男/女):')
  4. weight = float(input('请输入体重(kg):'))
  5. height = float(input('请输入身高(cm):'))
  6. age = int(input('请输入年龄:'))
  7. #计算BMR值
  8. if gender == '男':
  9. BMR=13.7*weight+5.0*height-6.8*age+66
  10. elif gender == '女':
  11. BMR=9.7*weight+1.8*height-4.7*age+665
  12. else:
  13. BMR=-1
  14. #输出结果
  15. if BMR == -1:
  16. print('输入的性别有误')
  17. else:
  18. print('您的BMR值是:',BMR)
  19. y_or_no = input('是否选择退出?(y/n):')
本关总结

这样一来就完成了基础代谢率计算2.0版本!庆祝一下~

下面一起来回顾本关用到的重点知识:

  • 数据类型转换
  • while循环
下节预告

用户能否将信息在一行内全部输入?

能否实现输出时带单位?

这两个问题下节课我们将一起解决~

如果你想领取课程相关资料,和更多同学一起交流学习,欢迎添加班主任老师微信,我们下节课不见不散哦~

扫描二维码添加班主任微信

已经添加过班主任的同学,可以直接联系对应老师,无需重复添加哦。

基础代谢率计算 1/3

基础代谢率计算(2)

1.0x

恭喜完成本课时的学习!
坚持学习

行动力超过

累计学习

学习下一课时