我在Python中沾沾自喜,过去一两个小时我一直盯着这段代码。即使我知道我的程序已经生成了正确的数字序列,即所谓的毕达哥拉斯三元组,逻辑也不会“抓住”三元组。这是欧拉问题#9。
#https://projecteuler.net/problem=9
def main(num):
i = num
j = k = 0
while i >= 0:
while j >= k:
print(i, ",", j, ",", k, ": ", i*i, "=", j*j + k*k)
if i*i == j*j + k*k & i > j > k: # this line here should detect the triple
print("found")
print(i, ",", j, ",", k)
break
j -= 1
k += 1
i -= 1
j = 1000 - i
k = 0
main(1000)
#The Pythagorean triple is 425, 375, 200, and the sum is 1000
#The product is 31875000
这一行显然是......
if i*i == j*j + k*k & i > j > k: #this line here should detect the triple
...不会返回true,即使程序正确生成三元组(425,375,200)
我确信我一定错过了一些非常明显的东西。
答案 0 :(得分:2)
我认为您可能希望使用逻辑和运算符and
(Python等效的C和Java &&
)而不是按位和运算符&
。< / p>
添加一些括号可能也会有所帮助,以确保使用您想要的优先级来评估运算符。
以下内容适用于我:
if (i*i == j*j + k*k) and (i > j > k): # should detect the triple
答案 1 :(得分:0)
尝试使用以下代码替换注释行。 理解一件事 - 在python中“和”而不是“&amp;&amp;”在C.
if((i ** 2)==((j ** 2)+(k ** 2)))和(i&gt; j&gt; k):
如果您的代码在逻辑上是正确的,那么这应该有效。