我的Python代码不像我认为的那样工作

时间:2014-11-15 16:36:21

标签: python

我在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)

我确信我一定错过了一些非常明显的东西。

2 个答案:

答案 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):

如果您的代码在逻辑上是正确的,那么这应该有效。