Python3代码未按预期执行,给出了错误的数字
我最近开始接触Python,但我想不出任何东西来制作。所以我决定把我所有的项目Euler都移植到Python上,只是为了做点事情。但基本上,下面的代码应该是a、b和c的乘积,其中a+b+c=1000。(毕达哥拉斯三重态) 此代码生成正确的结果,即3187500.0。我希望它返回一个整数,而不是一个浮点值。我试过了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
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())