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