- A+
所属分类:Python习题
代码要求:
根据用户输入的身高与体重计算用户的BMI值处于一个什么样的状态。
BMI = 体重除以(身高的2次方),身高需要转为米为单位
代码内容:
代码中最难的部分不是正常输入的部分,而是要考虑用户会输入哪些内容,然后来告知用户要输入什么样的内容。
- height = input('输入您的身高(厘米CM):')
- weight = input('输入您的体重(公斤KG):')
- strnum = '0123456789.'
- x = 0
- y = 0
- for i in height:
- if i in strnum:
- x += 1
- for i in weight:
- if i in strnum:
- y += 1
- print(x,y)
- if x + y == (len(height) +len(weight)):
- heights = float(height)
- weights = float(weight)
- bmi = weights/((heights/100)**2)
- if bmi<18.4:
- print('太轻了')
- elif bmi >=18.4 and bmi < 23.9:
- print('正常')
- elif bmi >=24 and bmi <27.9:
- print('过重')
- else:
- print('肥胖')
- else:
- print('您输入的体重或身高可能输错了,只能输入数字和小数点')
写到这个代码内容的时候,已经测试了很多种判断条件,均没办法符合要求比如
isdigit()判断用户输入的内容为数字,那如果用户输入的45.5KG呢,这里就出现了False
- (type(float(height))==float) and (type(float(weight))==float)
判断他们的类型是否相同,那如果用户输入的是数字,那我再加一个or判断?但如果用户输入的两个内容都是False ,那结果就成了 True,那如果输入的一个是数字,一个是字母呢?
疯了吧,所以就出现了上面的遍历,然后再查找内容是包含在strnum中
- if x + y == (len(height) +len(weight)):
而这一句是也后面改的,本来是x+y==2,后面发现不对当1.2a,遍历第一个的时候x已经被赋值了,所以就有x+=1,来依次判断用户输入的内容是否在内容,如果用户输入的内容是正确的,那么他们两个值是相等,但如果用户输入的内容中间多了一个字母或符号,就会发现x少加了一次,这样他们的结果就不相等,就返回了else的结果了。
第二种解决方案
因为没有学到这个部分的内容,所以就没有办法太深入的理解了,但是你可以百度try异常,也不是很难的。
- height = input('输入您的身高(厘米CM):')
- weight = input('输入您的体重(公斤KG):')
- try:
- heights = float(height)
- weights = float(weight)
- except ValueError:
- print('不可以输入数字以外的内容。')
- else:
- bmi = weights/((heights/100)**2)
- if bmi<18.4:
- print('太轻了')
- elif bmi >=18.4 and bmi < 23.9:
- print('正常')
- elif bmi >=24 and bmi <27.9:
- print('过重')
- else:
- print('肥胖')
原文:http://bbs.fishc.com/thread-84834-1-1.html 感谢鱼C论坛冬雪雪冬版主提供的方案