我正在对代码战做练习,我应该找出一个数字是否是一个完美的正方形。我大部分时间都完成了代码,大部分时间都可以使用,但是当返回False时,我得到了错误的答案。
def is_square(n):
if n<0:
return False
if n == 0:
return True
if n>1:
for i in range(0,n):
if i*i==n:
return True
else:
return False
如果我删除最后一个else语句,则4和25返回true,但是当我添加最后一个else语句时,它表示4和25都是false。我如何修复它,如果在保持25为真的情况下输入27则返回false?
答案 0 :(得分:3)
将return False
放在<{strong> for
循环
def is_square(n):
if n<0:
return False
if n == 0 or n == 1:
return True
if n > 1:
for i in range(0,n):
if i*i==n:
return True
return False
答案 1 :(得分:0)
如何修复它,如果输入27则返回false 同时保持25为真?
在你的代码中使用else语句:
else:
return False
是缩进的,因此只要i * i不等于n,函数就会返回False。你需要删除这个&#34;否则&#34;言。
您还应该添加代码来处理n == 1,例如
if n==1:
return True
你可以用决赛结束&#34;返回False&#34;在函数中最低级别的缩进,以捕获剩余的非完美正方形。
您还可以考虑在循环中添加i * i小于或等于n的检查,这将大大加快您的代码运行时的大数字。
所以,总结:像这样的代码会起作用:
def is_square(n):
if n<0:
return False
if n == 0:
return True
if n == 1:
return True
if n>1:
for i in range(0,n):
if i*i==n:
return True
return False
但是这样的代码更好(更快):
def is_square(n):
if n<0:
return False
if n == 0:
return True
if n == 1:
return True
if n>1:
for i in range(0,n):
if i*i==n:
return True
if i*i>n:
break
return False
答案 2 :(得分:0)
这应该有效:
def square(n):
import math
if (n < 0):
return False
if (int(math.sqrt(n)) == math.sqrt(n)):
return True
else:
return False