2014-04-16 31 views
0

我正在尝试使BMI计算器功能。我在学校学习python。 这是我的代码: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它也将不胜感激,因为这个网站似乎有时是一种错误。我正在寻找免费的在线资源。没有书,请。

+2

Python 2,对吧?然后你使用整数除法。 –

+0

实际上,考虑到身高是一个小数(你以米为单位计算体重指数,而不是以厘米为单位),这个_应该已经使用了浮点除法 - 但只有当你明确地通过浮点参数时,即你必须通过2.0而不是2. –

+0

@ MartijnPieters我相信它的Python 3。 – czaarek99

回答

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完全10次。

0

的问题与您的分工。

由于我们本质上知道它是浮点除法或除法,其中1/2的计算结果为小数0.5。在标准的程序分区中,1,2ints()因此不能是分数,或者是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