Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果完全平方,则返回True;如果不是,则返回false_Python - Fatal编程技术网

Python 如果完全平方,则返回True;如果不是,则返回false

Python 如果完全平方,则返回True;如果不是,则返回false,python,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:

我在做一个关于代码战的练习,我想知道一个数字是否是一个完美的正方形。我大部分时间都完成了代码,大部分时间都能正常工作,但是当返回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
def为正方形(n):
如果n1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
其他:
返回错误

如果我删除最后一个else语句,4和25返回true,但是当我添加到最后一个else语句时,它表示4和25是false。如果输入了27而保持25为真,我将如何修复它以使其返回false?

返回false
放在
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
def为正方形(n):
如果n 1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
返回错误

for循环之后放置
return False

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
def为正方形(n):
如果n 1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
返回错误
如果输入27,我将如何修复它以使其返回false 而保持25是真的

在代码中,else语句:

            else:
                return False
缩进,以便函数在i*i不等于n时返回False。您需要删除此“else”语句

例如,您还应该添加代码来处理n==1

        if n==1:
            return True
您可以在函数中的最低缩进级别使用最终的“return False”来捕获剩余的非完美正方形

您还可以考虑在循环中添加一个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为正方形(n):
如果n1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
返回错误
但类似这样的代码更好(更快):

def为正方形(n):
如果n1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
如果i*i>n:
打破
返回错误
如果输入27,我将如何修复它以使其返回false 而保持25是真的

在代码中,else语句:

            else:
                return False
缩进,以便函数在i*i不等于n时返回False。您需要删除此“else”语句

例如,您还应该添加代码来处理n==1

        if n==1:
            return True
您可以在函数中的最低缩进级别使用最终的“return False”来捕获剩余的非完美正方形

您还可以考虑在循环中添加一个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为正方形(n):
如果n1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
返回错误
但类似这样的代码更好(更快):

def为正方形(n):
如果n1:
对于范围(0,n)内的i:
如果i*i==n:
返回真值
如果i*i>n:
打破
返回错误
这应该可以:

def square(n):
    import math
    if (n < 0):
        return False
    if (int(math.sqrt(n)) == math.sqrt(n)):
        return True
    else:
        return False
def方形(n):
输入数学
如果(n<0):
返回错误
如果(int(math.sqrt(n))==math.sqrt(n)):
返回真值
其他:
返回错误
这应该可以:

def square(n):
    import math
    if (n < 0):
        return False
    if (int(math.sqrt(n)) == math.sqrt(n)):
        return True
    else:
        return False
def方形(n):
输入数学
如果(n<0):
返回错误
如果(int(math.sqrt(n))==math.sqrt(n)):
返回真值
其他:
返回错误


你不能只检查平方根是否是整数吗?当任何
i*i==n
为false时,你将返回false。所以,它总是会失败。您不需要删除最后一行,而是删除它,以便在
for
循环完成后发生,而不是每次都通过循环。@jpp对于太大而无法放入
float
的数字,这将引发
溢出错误,更糟糕的是,默默地给你一个错误的答案,对于所有小到足以容纳一个浮点数,但不足以容纳而不被截断的事物。我不认为这两者都是dup,但如果你对此感到困惑的话,请解释
return
是如何工作的。另外,您的函数未定义n=1。您是否可以检查平方根是否为整数?当任何
i*i==n
第一次为false时,您将返回false。所以,它总是会失败。您不需要删除最后一行,但要删除它,以便在完成
for
循环之后发生,而不是每次通过循环。@jpp将导致
overflowerError
的数字过大,无法适应
float
,更糟的是,默默地给你一个错误的答案,对于所有小到足以容纳一个浮点数,但不足以容纳而不被截断的事物。我不认为这两者都是dup,但如果你对此感到困惑的话,请解释
return
是如何工作的。另外,未定义n=1的函数。当n==1时,此函数将返回None。更新为句柄1。当n==1时,此函数将返回None。更新为句柄1。
break
return True
之后无效,但如果循环继续,它将返回False,因为只有最近的返回计数,即使返回值为true,它也将返回False。同一块中返回后的任何代码将永远不会执行。你应该运行你的代码看看它是否真的有效。然后它返回false,因为我从0开始,除非n是0,否则它将返回false,然后停止是,这就是OP代码的问题。您在该位置添加的中断不会改变任何内容。
break
return True
之后无效,但如果循环继续,它将返回False,并且由于只有最近的返回计数,因此即使任何代码为True,它也将返回False