Python3代码未按预期执行,给出了错误的数字

Python3代码未按预期执行,给出了错误的数字,python,windows,python-3.x,Python,Windows,Python 3.x,我最近开始接触Python,但我想不出任何东西来制作。所以我决定把我所有的项目Euler都移植到Python上,只是为了做点事情。但基本上,下面的代码应该是a、b和c的乘积,其中a+b+c=1000。(毕达哥拉斯三重态) 此代码生成正确的结果,即3187500.0。我希望它返回一个整数,而不是一个浮点值。我试过了 needed = round(sqrt(a*a + b*b)) 但出于某种原因,它返回的是数字498002,它甚至不接近相同的数字。我也尝试过使用数学库中的Floor,但这也和int

我最近开始接触Python,但我想不出任何东西来制作。所以我决定把我所有的项目Euler都移植到Python上,只是为了做点事情。但基本上,下面的代码应该是a、b和c的乘积,其中a+b+c=1000。(毕达哥拉斯三重态)

此代码生成正确的结果,即3187500.0。我希望它返回一个整数,而不是一个浮点值。我试过了

needed = round(sqrt(a*a + b*b))

但出于某种原因,它返回的是数字498002,它甚至不接近相同的数字。我也尝试过使用数学库中的Floor,但这也和int()一样。有什么是我忽略的吗?还是这是一只虫子?还是怎样如果这很重要的话,我会使用Python 3.5。

因为当你
round()
关闭,或者甚至做
int()
sqrt()
结果转换为整数时,你会失去精度,就像
I
是2而
j
499
一样,因为
I
太小了,
a^2+b^2
的sqrt类似于-
499.0040079999358
——四舍五入将得到
499
。您的程序会错误地假设这是一个三元组,因为
499+499+2
1000

在返回之前,应该将乘积转换为整数,而不是将
sqrt
的结果四舍五入。范例-

from math import sqrt

def solve():
    product = 0
    for a in range(1, 500):
        for b in range(1, 500):
            needed = sqrt(a*a + b*b)
            if a + b + needed == 1000:
                    product = a * b * needed
                    return int(product)
    return product

print(solve())

int(solve())
有什么问题?@I'L'I我在写这篇文章的时候并没有这样想,尽管现在有人指出这一点似乎非常明显。啊,这更有意义。既然你指出了这一点,我觉得自己真的很愚蠢,因为我一开始就没有意识到这一点。非常感谢。很高兴我能帮上忙。如果答案对你有帮助,我希望你通过点击答案左侧的勾号来接受答案,这将对社区有帮助。
from math import sqrt

def solve():
    product = 0
    for a in range(1, 500):
        for b in range(1, 500):
            needed = sqrt(a*a + b*b)
            if a + b + needed == 1000:
                    product = a * b * needed
                    return int(product)
    return product

print(solve())