免费在线 BMI 计算器编码Python版代码(两条解决思路)

  • A+
所属分类:Python习题

代码要求:

根据用户输入的身高与体重计算用户的BMI值处于一个什么样的状态。

BMI = 体重除以(身高的2次方),身高需要转为米为单位

代码内容:

代码中最难的部分不是正常输入的部分,而是要考虑用户会输入哪些内容,然后来告知用户要输入什么样的内容。

  1. height = input('输入您的身高(厘米CM):')
  2. weight = input('输入您的体重(公斤KG):')
  3. strnum = '0123456789.'
  4. x = 0
  5. y = 0
  6. for i in height:
  7.     if i in strnum:
  8.        x += 1
  9. for i in weight:
  10.     if i in strnum:
  11.         y += 1
  12. print(x,y)
  13. if x + y == (len(height) +len(weight)):
  14.         heights = float(height)
  15.         weights = float(weight)
  16.         bmi = weights/((heights/100)**2)
  17.         if bmi<18.4:
  18.             print('太轻了')
  19.         elif bmi >=18.4 and bmi < 23.9:
  20.             print('正常')
  21.         elif bmi >=24 and bmi <27.9:
  22.             print('过重')
  23.         else:
  24.             print('肥胖')
  25. else:
  26.     print('您输入的体重或身高可能输错了,只能输入数字和小数点')

写到这个代码内容的时候,已经测试了很多种判断条件,均没办法符合要求比如

isdigit()判断用户输入的内容为数字,那如果用户输入的45.5KG呢,这里就出现了False

  1. (type(float(height))==floatand (type(float(weight))==float)

判断他们的类型是否相同,那如果用户输入的是数字,那我再加一个or判断?但如果用户输入的两个内容都是False ,那结果就成了 True,那如果输入的一个是数字,一个是字母呢?

疯了吧,所以就出现了上面的遍历,然后再查找内容是包含在strnum中

  1. if x + y == (len(height) +len(weight)):

而这一句是也后面改的,本来是x+y==2,后面发现不对当1.2a,遍历第一个的时候x已经被赋值了,所以就有x+=1,来依次判断用户输入的内容是否在内容,如果用户输入的内容是正确的,那么他们两个值是相等,但如果用户输入的内容中间多了一个字母或符号,就会发现x少加了一次,这样他们的结果就不相等,就返回了else的结果了。

 

第二种解决方案

因为没有学到这个部分的内容,所以就没有办法太深入的理解了,但是你可以百度try异常,也不是很难的。

  1. height = input('输入您的身高(厘米CM):')
  2. weight = input('输入您的体重(公斤KG):')
  3. try:
  4.     heights = float(height)
  5.     weights = float(weight)
  6. except ValueError:
  7.     print('不可以输入数字以外的内容。')
  8. else:
  9.     bmi = weights/((heights/100)**2)
  10.     if bmi<18.4:
  11.         print('太轻了')
  12.     elif bmi >=18.4 and bmi < 23.9:
  13.         print('正常')
  14.     elif bmi >=24 and bmi <27.9:
  15.         print('过重')
  16.     else:
  17.         print('肥胖')

原文:http://bbs.fishc.com/thread-84834-1-1.html 感谢鱼C论坛冬雪雪冬版主提供的方案

 

李金龙

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: