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

时间:2017-06-13 20:36:58

标签: 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

我确信此代码有效。但是,当我完成测试用例时,例如:test.expect( is_square( 4)),它表示该值不是预期的值。

12 个答案:

答案 0 :(得分:6)

您的功能实际上并不起作用,因为它会在找到的第一个非平方根上立即返回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

一旦检查了所有可能的平方根,它只返回false。您可能还想查看math.sqrt()float.is_integer()。使用这些方法,您的功能将变为:

from math import sqrt

def is_square(n):
    return sqrt(n).is_integer()

请记住,此方法不适用于非常大的数字,但使用它们的方法会很慢,因此您必须选择使用哪种方法。希望我帮忙!

答案 1 :(得分:4)

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

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

答案 2 :(得分:3)

Python哲学的主要思想是编写简单的代码。检查一个数字是否是一个完美的正方形:

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

当浮动电源时,您可以找到数字的根。

答案 3 :(得分:0)

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

import math
number = 16
if math.sqrt(number).is_interger:
        print "Square"
else:
        print "Not square"

import math importmath模块。

if math.sqrt(number).is_interger:检查number的平方根是否为整数。如果是,则会print Square。否则,它将print Not square

答案 4 :(得分:0)

由于math.sqrt()返回一个浮点数,我们可以将它转换为一个字符串,将其从&#34;拆分。&#34;并检查右边的部分(小数)是否为0。

import math
def is_square(n):
x= str(math.sqrt(n)).split(".")[1]  #getting the floating part as a string.
return True if(x=="0") else False

答案 5 :(得分:0)

def myfunct(num):
    for i in range(0,num):
        if i*i==num:
            return 'square'
    else:
        return 'not square'

答案 6 :(得分:0)

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

def squaretest(num):
    sqlist=[]
    i=1
    while i**2 <= num:
        sqlist.append(i**2) 
        i+=1
    return num in sqlist

答案 7 :(得分:0)

假设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

答案 8 :(得分:0)

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

from sympy.ntheory.primetest import is_square 

,您可以检查这样的数字:

is_square(number) 

它将返回布尔值

答案 9 :(得分:0)

另一种方法:

    def SQRT(x):
        import math
        if math.sqrt(x) == round(math.sqrt(x)):
            return True
        else:
            return False

答案 10 :(得分:0)

function MyGamesInput() {
    return (
        <div>
            <label>
                <p>How many games do you want to play?</p>
                <input onChange={this.handleChangeInput} type="text" />
            </label>
        </div>
    );
}

<SelectOne/>
{
    this.props.selectedGame === "pingpong" && <MyGamesInput />
}

<SelectTwo/>
{
    this.props.selectedGame === "basketball" && <MyGamesInput />
}

答案 11 :(得分:0)

在 Python 3.8+ 中,使用这个:

def is_square(n):
    root = math.isqrt(n)
    return n == root * root