2014-11-15 130 views
0

我在Python中弄湿了自己的脚,而且我一直在盯着过去一两个小时的代码。即使我知道我的程序已经生成了正确的数字序列,即所谓的毕达哥拉斯三元组,逻辑将不会“抢”三元组。这是欧拉问题#9。我的Python代码不能像我认为的那样工作

#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,即使程序正确生成三重(425375200)

我敢肯定,我必须错过了完全明显的东西。

回答

2

我想你可能想要使用逻辑运算符and(Python的等价物C和Java的&&)而不是按位运算符&

它也可能有助于添加一些括号以确保操作符正在以您想要的优先级进行评估。

下面一行对我的作品:

if (i*i == j*j + k*k) and (i > j > k): # should detect the triple 
+1

此建议对我无效。我试图将整个布尔语句分解为一组if语句,而且这种策略也不起作用。 –

+0

你还需要一些括号。我已经更新了我的答案。 – DanielGibbs

+1

这很奇怪,它仍然不适合我。如果它为你工作,那么我一定在做错事。 –

0

尝试用下面的代码替换注释行。 了解一个东西─在蟒 “和” C.是 “& &” 有代替

如果((I ** 2)==((j ** 2)+(K ** 2)) )和(i> j> k):

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

相关问题