为了账号安全,请及时绑定邮箱和手机立即绑定

完全平方函数

完全平方函数

达令说 2022-12-27 17:22:03
如果数字是一个完美的正方形,我正在尝试制作一个说“是”的函数。以下是代码,考虑到我是初学者,请建议我需要进行的更改。def perfsq(x):    if s == (math.sqrt(x)) and s * s == x:        print('yes')
查看完整描述

5 回答

?
月关宝盒

TA贡献1772条经验 获得超5个赞

示例 1:


import math


def perfsq(x):

    if math.sqrt(x)%1 == 0:

        print('yes')

    else:

        print('no')

调用你的函数:


perfsq(16)

示例 2:


x = 16


print('yes') if math.sqrt(x)%1 == 0 else print('no')


查看完整回答
反对 回复 2022-12-27
?
FFIVE

TA贡献1797条经验 获得超6个赞

我希望这可以帮助:


import math


number = int(input("Enter the Number"))


root = math.sqrt(number)


if int(root + 0.5) ** 2 == number:

    print("YES")

else:

    print("NO")


查看完整回答
反对 回复 2022-12-27
?
catspeake

TA贡献1111条经验 获得超0个赞

您的函数有错误,因为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


查看完整回答
反对 回复 2022-12-27
?
浮云间

TA贡献1829条经验 获得超3个赞

你似乎有两个主要的误解:

  1. ==用于比较对象,而不是赋值。我相信您打算分配smath.sqrt(x)这是由s = math.sqrt(x).

  2. 即使进行了上述更改,您也不能将该赋值放在if语句中。if条件可以包含表达式,而不是语句。赋值是语句。


要解决这个问题,您需要做的就是首先单独分配s

import math


def perfsq(x):

    s = math.sqrt(x) 

    if s * s == x:

        print('yes')

现在你的问题是你变得依赖float precision。sqrt返回一个浮点数,因此对浮点数进行操作(例如s * s)是有风险的。举个例子,使用上面的函数,运行perfsq(35)实际上会打印'yes'!!!


为了避免这些精度问题,首先检查数字的平方根是否为 int 就足够了。所以你的代码可以大大简化为:


import math


def perfsq(x):

    if math.sqrt(x).is_integer():

        print('yes')

这是使用该float.is_integer()方法,基于math.sqrt总是返回一个浮点数的事实。



查看完整回答
反对 回复 2022-12-27
?
倚天杖

TA贡献1828条经验 获得超3个赞

考虑这个


def perfsq(x):

    s = math.sqrt(x)

    p = int(s)

    return p==s


查看完整回答
反对 回复 2022-12-27
  • 5 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信