判断平方数,把我搞懵逼了,问题在哪?

"""
1.问题:给定正整数n,判断是否为完全平方数
2.示例:输入n=16返回为Ture且平方根为4,输入n=15,返回False且平方根为3.87

"""


# 1.自己写:

class Solution1:
    def ssr(self, n):
        if isinstance(n ** 0.5, int) == True:
            print(f"{n}是完全平方数且平方根是{n ** 0.5}")
        else:
            print(f"{n}不是完全平方数且平方根是{n ** 0.5}")


num1 = Solution1()

num1.ssr(12)
num1.ssr(16)
# 此代码出现了错误,因为就算16开方出来是4,但是也算4是float而非Int。。。

# 2.尝试用math.sqrt

import math


class Solution2:
    def ssr(self, n):
        result = isinstance(math.sqrt(n), int)  # 加一个检查类型的句子,没问题注销就行
        print(result)
        if result == True:
            print(f"{n}是完全平方数且平方根是{n ** 0.5}")
        else:
            print(f"{n}不是完全平方数且平方根是{n ** 0.5}")


num2 = Solution2()

num2.ssr(12)
num2.ssr(16)


# 还是不行,不管怎样都是浮点数

# 3.答案如下:

class Solution3:
    def isPerfectSquare(self, num):
        l = 0
        r = num
        while (r - l) > 1:
            mid = (l + r) / 2
            if (mid * mid <= num):
                l = mid
            else:
                r = mid
        ans = 1
        if (1 * 1 < num):
            ans = r
        return ans * ans == num


if __name__ == '__main__':
    num = 25
    print("初始值:", num)
    solution = Solution3()
    print("结果:", solution.isPerfectSquare(num))

#运行结果:初始值: 25 结果: False



三个全出错,已经不知道咋弄了。。。。

# 1.自己写:
class Solution1:
    def ssr(self, n):
        a = int((math.sqrt(n)))
        if(a * a == n):
            print(f"{n}是完全平方数且平方根是{n ** 0.5}")
        else:
            print(f"{n}不是完全平方数且平方根是{n ** 0.5}")

 

修改如下: 

import math

class Solution2:
    def ssr(self, n):
        result = math.sqrt(n)
        b = result - int(result)
        if b == 0.0:
            print('Ture')
            print(int(result))
        else:
            print('False')
            print(result)

num2 = Solution2()
num2.ssr(15)
num2.ssr(16)