我正在尝试制作BMI计算器功能。我在pyschools学习python。 这是我的代码:
# Note: Return a string of 1 decimal place.
def BMI(weight, height):
x = weight /(height*height)
g = round(x,1)
return g
pyschools告诉我这些是正确的答案: 110 =体重,2 =身高,我应该得到27.5的BMI。 但我反而得到了27。
然后它会进行第二次检查,以确保我编写正确的代码并告诉我24,2是正确的答案,但我的程序确实返回24,2。但它仍然用红色标出我的答案并且说"我的" 24,2是错误的,网站是对的。
如果有人有更好的网站或任何学习python的东西,也会受到赞赏,因为这个网站有时候似乎有点不对劲。我正在寻找免费的在线资源。请不要书。
答案 0 :(得分:1)
要解决所有情况,请将此行添加到顶部:
from __future__ import division # Make division work like in Python 3.
在Python 2中,/
表示整数除法。
考虑到这一点,在Python 2中如果将intgers传递给division,它将返回一个整数。任何可能是浮动的东西都是 * 。因此,获得所需结果的另一个选择是传递float
,而不是:
weight / (height*height)
做的:
float(weight) / (height*height) # float in means float out.
* 这意味着只计算除数进入的全部时间。因此1/2
将获得0,因为2
完全进入1
0
次。
答案 1 :(得分:0)
def BMI(weight, height):
x = float(weight) /(height*height)
g = round(x,1)
return g
答案 2 :(得分:0)
问题在于你的分工。
分区,因为我们本质上知道它是浮点除法,或1 / 2
求值为分数0.5
的除法。在标准的程序划分中,1
,2
为ints()
因此无法成为分数,或floats()
,因为在python中调用了类型。因此,表达式1 / 2
的计算结果为0
,因为2整数整数不能完全变为一个整数。
例如:
In [1]: 1 / 2
Out[1]: 0
# Explicitly what is going on, since 1 and 2 are ints.
In [2]: int(1) / int(2)
Out[2]: 0
#fixed with floating division
In [3]: float(1) / float(2)
Out[3]: 0.5
# protip: only one of the divisors needs to be a float for python to divide correctly.
In [4]: 1 / float(2)
Out[4]: 0.5
使用x = weight / float((height*height))
获得您期望的结果。
# Note: Return a string of 1 decimal place.
def BMI(weight, height):
x = weight / float((height*height))
g = round(x,1)
return g