如果不是

时间:2018-05-11 22:08:55

标签: python

我正在对代码战做练习,我应该找出一个数字是否是一个完美的正方形。我大部分时间都完成了代码,大部分时间都可以使用,但是当返回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?

3 个答案:

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