Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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-检查数字是否为正方形_Python_Input_Integer_Boolean - Fatal编程技术网

Python-检查数字是否为正方形

Python-检查数字是否为正方形,python,input,integer,boolean,Python,Input,Integer,Boolean,我写了一个函数,返回一个数字输入是否为正方形 def is_square(n): if n<1: return False else: for i in range(int(n/2)+1): if (i*i)==n: return True else: return False def为正方形(n): 如果n您的函数实际上不起作用

我写了一个函数,返回一个数字输入是否为正方形

def is_square(n):
    if n<1:
        return False
    else:
        for i in range(int(n/2)+1):
            if (i*i)==n:
                return True
            else:
                return False
def为正方形(n):

如果n您的函数实际上不起作用,因为它会在找到第一个非平方根时立即返回False。相反,您希望将代码修改为:

def is_square(n):
    if n<1:
        return False
    else:
        for i in range(int(n/2)+1):
            if (i*i)==n:
                return True
        return False

请记住,这种方法不会处理非常大的数字,但是您的方法处理它们的速度非常慢,因此您必须选择使用哪种方法。希望我能帮忙

要检查数字是否为正方形,可以使用如下代码:

import math
number = 16
if math.sqrt(number).is_interger:
        print "Square"
else:
        print "Not square"
is_square(number) 
导入数学
导入
s
数学
模块


if math.sqrt(number).is_integer:
检查
number
的平方根是否为整数。如果是这样,它将
打印
正方形
。否则,它将
打印
而不是方形

Python哲学的主要思想是编写简单的代码。要检查数字是否为完美正方形,请执行以下操作:

def is_square(n):
    return n**0.5 == int(n**0.5)

通电到浮点时,您可以找到一个数字的根。

要坚持使用基于整数的算法,您可以查看查找平方根的二进制搜索的实现:

def is_square(n):
    if n < 0:
        return False
    if n == 0:
        return True
    x, y = 1, n
    while x + 1 < y:
        mid = (x+y)//2
        if mid**2 < n:
            x = mid
        else:
            y = mid
    return n == x**2 or n == (x+1)**2
def为正方形(n):
如果n<0:
返回错误
如果n==0:
返回真值
x、 y=1,n
当x+1
由于math.sqrt()返回一个浮点,我们可以将其转换为字符串,从“.”中拆分,并检查右侧部分(小数点)是否为0


最简单的工作解决方案,但不适用于大量用户

def squaretest(num):
    sqlist=[]
    i=1
    while i**2 <= num:
        sqlist.append(i**2) 
        i+=1
    return num in sqlist
def平方测试(num):
sqlist=[]
i=1
而i**2假设n>=0:

def is_square(n):
    tmp = int(n ** 0.5)
    return n == tmp * tmp
          
print(is_square(81), is_square(67108864 ** 2 + 1))  # True False

您可以简单地使用simpy模块 作为

from sympy.ntheory.primetest import is_square 
您可以查看以下数字:

import math
number = 16
if math.sqrt(number).is_interger:
        print "Square"
else:
        print "Not square"
is_square(number) 
它将返回一个布尔值

另一种方法:

    def SQRT(x):
        import math
        if math.sqrt(x) == round(math.sqrt(x)):
            return True
        else:
            return False
def为正方形(n):
如果n<0:
返回错误
返回轮(n**0.5)**2==n

在Python 3.8+中,使用以下命令:

def为正方形(n):
root=math.isqrt(n)
返回n==根*根

平方(1)
的值是多少?或者
是正方形(4)
?对于任何
n
,或者
都是平方(n**2)
?如果(1*1)==n
,您首先要尝试的似乎是
。除非
n==1
,否则您的测试将失败。在确信您的代码工作之前,您应该使用
print
语句测试您的代码。请添加输入和输出示例,并更具体地回答您的问题。如果您需要任何其他解决完美根本问题的方法,您会找到它。顺便说一句,看到这样的算法让我的眼睛流血。哈哈,这是真的!好吧,遵循OP的方法。编辑以添加另一个(更干净的)方法。
math.sqrt
与大多数浮点运算一样,只是近似值。如果您想知道整数是否是平方,
math.sqrt
不是合适的函数。编辑以反映这一点。一旦你的数字真的变大,就会失去精度:
是平方(67108864**2+1)
产生
True
@TemporalWolf Quote from[micsthepick]()如果你想检查荒谬的大案例,你应该使用巴比伦算法方法,但对于简单的情况,如找到100万以下的完美平方数或使用蛮力算法的其他类似情况,这是很好的。这种方法不一定是错误的,但我喜欢预先承认限制。
math.sqrt(67108864**2+1)。is_integer()
产生
True
浮点精度有一个限制。在平均和最坏情况下,此解决方案的运行时间是多少?最坏和平均情况下,它是
log n
,与您的解决方案相比,它是
n/2
。虽然此代码可以回答问题,提供关于如何解决问题以及为什么解决问题的附加上下文将提高答案的长期价值。
    def SQRT(x):
        import math
        if math.sqrt(x) == round(math.sqrt(x)):
            return True
        else:
            return False
def is_square(n):
if n< 0:
    return False
return round(n ** 0.5) ** 2 == n