Python代码错误导致不返回(pitagorean集问题)

2024-10-01 02:29:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我刚刚开始用python编程和一般编程。 我制定了以下准则:

for a in range(1,1001):
  for b in range(1,1001):
    c2=(a**2)+(b**2)
    c=c2**0.5
    if type(c) == int and a+b+c == 1000:
        print(a*b*c)

寻找一个a+b+c=1000的pitagorean集,但没有返回。代码运行但不打印任何内容并结束。 这是一个euler9的问题,我知道我可以在互联网上找到解决方案,但我真的想知道为什么我提出的这个特殊的一个不起作用。在我的理解中,它应该检查1000范围内的每一对a和b,并检查是否有“a^2+b^2=c^2”,c的平方根是整数,a+b+c=1000。 谢谢你的帮助


Tags: andin内容foriftype编程range
2条回答

尝试设置c作为1000-a-b的结果这应该是一个整数。比比较c和a^2+b^2的幂。当你试图做一个平方根的时候,它通常不会给出一个整数,所以它的类型总是float。如果删除比较c type和int的代码应该可以工作。 如果要检查值是否为整数,应尝试使用内置函数is\ u integer()。 c.is_integer()

需要注意的几点:

1)c的类型将始终是一个float。因此,type(c) == int将始终计算为False,并且您的print语句将永远不会被命中。这是因为你的力量是一个浮点数。一般来说,平方根只能合理地表示为浮点数。你知道吗

2)您几乎从不想在Python中检查变量的类型,您的情况也不例外。您要做的是检查c是否有一个是整数,而不是检查c类型是否是整数。为此,请使用内置的is_integer。举个例子:

>>> x = 1 ** .5
>>> x
1.0
>>> x.is_integer()
True
>>> y = 2 ** .5
>>> y
1.4142135623730951
>>> y.is_integer()
False
>>> (4**.5).is_integer()
True
>>> (19**.5).is_integer()
False
>>> (25**.5).is_integer()
True

祝你解决问题好运。你知道吗

顺便说一句,这是毕达哥拉斯语,不是皮塔哥拉斯语。你知道吗

相关问题 更多 >