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')
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")
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
TA贡献1829条经验 获得超4个赞
你似乎有两个主要的误解:
==
用于比较对象,而不是赋值。我相信您打算分配s
.math.sqrt(x)
这是由s = math.sqrt(x)
.即使进行了上述更改,您也不能将该赋值放在
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
总是返回一个浮点数的事实。
添加回答
举报