完全平方函数

如果数字是一个完美的正方形,我正在尝试制作一个说“是”的函数。以下是代码,考虑到我是初学者,请建议我需要进行的更改。


def perfsq(x):


    if s == (math.sqrt(x)) and s * s == x:

        print('yes')


达令说
浏览 103回答 5
5回答

月关宝盒

示例 1:import mathdef perfsq(x):    if math.sqrt(x)%1 == 0:        print('yes')    else:        print('no')调用你的函数:perfsq(16)示例 2:x = 16print('yes') if math.sqrt(x)%1 == 0 else print('no')

FFIVE

我希望这可以帮助:import mathnumber = int(input("Enter the Number"))root = math.sqrt(number)if int(root + 0.5) ** 2 == number:    print("YES")else:    print("NO")

catspeake

您的函数有错误,因为s未定义。您的代码应如下所示 -def perfsq(x):    s = math.sqrt(x)          # You didn't define s in your code    if s == (math.floor(s)):  # Just check if square root is an integer        print('yes')        return True    else :        print('No')        return False

浮云间

你似乎有两个主要的误解:==用于比较对象,而不是赋值。我相信您打算分配s. math.sqrt(x)这是由s = math.sqrt(x).即使进行了上述更改,您也不能将该赋值放在if语句中。if条件可以包含表达式,而不是语句。赋值是语句。要解决这个问题,您需要做的就是首先单独分配s:import mathdef perfsq(x):    s = math.sqrt(x)     if s * s == x:        print('yes')现在你的问题是你变得依赖float precision。sqrt返回一个浮点数,因此对浮点数进行操作(例如s * s)是有风险的。举个例子,使用上面的函数,运行perfsq(35)实际上会打印'yes'!!!为了避免这些精度问题,首先检查数字的平方根是否为 int 就足够了。所以你的代码可以大大简化为:import mathdef perfsq(x):    if math.sqrt(x).is_integer():        print('yes')这是使用该float.is_integer()方法,基于math.sqrt总是返回一个浮点数的事实。

倚天杖

考虑这个def perfsq(x):    s = math.sqrt(x)    p = int(s)    return p==s
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python