Python Can';在我的平方和代码中找不到错误

Python Can';在我的平方和代码中找不到错误,python,Python,您必须测试所有值,如果第一次尝试不相等,则不返回 def sum_of_squares(n): for i in range(1, n): for j in range(1, n): if n == i*i + j*j: return True break else: return False 您也可以使用pow: def sumofsquares(n): for i in range(1, n):

您必须测试所有值,如果第一次尝试不相等,则不返回

def sum_of_squares(n):
  for i in range(1, n):
    for j in range(1, n):
      if n == i*i + j*j:
        return True
        break
      else:
        return False
您也可以使用pow:

def sumofsquares(n):
  for i in range(1, n):
    for j in range(1, n):
      if n == (i*i) + (j*j):
        return (true)
  return (false)
或:


这是不正确的,因为无论n是什么,函数都将在第一次检查后返回。您应该将
return False
放在两个循环之外,如下所示:

(i**2) + (j**2)
如果j从i开始会更好:

def sumofsquares(n):
for i in range(1, n):
    for j in range(1, n):
        if n == ((i * i) + (j * j)):
            return True
return False

更有效的方法是这样做:

def sumofsquares(n):
    for i in range(1, n):
        for j in range(i, n):
            if n == ((i * i) + (j * j)):
                return True
    return False

在这里,您只进行一次迭代,直到平方根。第一个
if
检查
n
是否是两个相等的平方和(如8=4+4),因为
for
循环中没有涉及这种情况。

似乎是这样,但为什么不试试呢?而且
return
之后的
break
也是无用的。为了提高效率,你也可以只循环到
sqrt(n)
。你为什么要问它是否正确?试试看!否。它将在测试
1*1+1*1
后返回。你知道为什么吗?如果你已经知道你的代码中有一个bug,为什么不在你的问题中陈述它呢?
def sumofsquares(n):
    for i in range(1, n):
        for j in range(i, n):
            if n == ((i * i) + (j * j)):
                return True
    return False
import math
def is_sum_of_squares(n):
    s=set()
    if 2*int(math.sqrt(n/2.0))**2==n:
        return True
    for i in range(1,int(math.sqrt(n)+1)):
        if n-i**2 in s:
            return True
        else:
            s.add(i**2)
    return False