我刚开始使用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 。 感谢您的帮助
答案 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。是毕达哥拉斯,而不是毕达哥拉斯。