Python代码错误导致无人退还(pitagorean设置问题)

时间:2019-01-22 22:11:54

标签: 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但没有返回值的皮塔哥利人集合。代码可以运行,但不会输出任何内容并结束。 这是一个euler9问题,我知道我可以在Internet上找到解决方案,但我真的很想了解为什么我提出的这个特定解决方案不起作用。以我的理解,它应该检查每对a和b在1000的范围内,并检查是否有任何“ a ^ 2 + b ^ 2 = c ^ 2”,c的平方根是整数并且a + b + c = 1000 。 感谢您的帮助

2 个答案:

答案 0 :(得分:1)

尝试将c设置为1000-a-b的结果,这应该是整数,然后将c的幂与a ^ 2 + b ^ 2进行比较。当您尝试制作平方根时,通常不会给出整数,因此此类型始终为浮点型。如果删除将c类型与int进行比较,则代码应该可以工作。 如果要检查该值是否为整数,则应尝试内置函数is_integer()。 c.is_integer()

答案 1 :(得分:1)

需要注意的几件事:

1)c的类型将始终为浮点数。因此,type(c) == int将始终取值为False,并且您的打印语句将永远不会被点击。这是因为您的 power 是浮点数。通常,方根仅被合理地表示为浮点数。

2)您几乎永远不想在Python中检查变量的类型,您的情况也不例外。您要执行的操作是检查c是否具有作为整数的 value ,而不是检查c type 是否为整数。为此,请使用内置的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

HTH,祝您好运解决问题。

P.S。是毕达哥拉斯,而不是毕达哥拉斯。