5 回答

TA貢獻1772條經(jīng)驗 獲得超5個贊
示例 1:
import math
def perfsq(x):
if math.sqrt(x)%1 == 0:
print('yes')
else:
print('no')
調(diào)用你的函數(shù):
perfsq(16)
示例 2:
x = 16
print('yes') if math.sqrt(x)%1 == 0 else print('no')

TA貢獻1797條經(jīng)驗 獲得超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條經(jīng)驗 獲得超0個贊
您的函數(shù)有錯誤,因為s未定義。您的代碼應(yīng)如下所示 -
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條經(jīng)驗 獲得超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')
現(xiàn)在你的問題是你變得依賴float precision。sqrt返回一個浮點數(shù),因此對浮點數(shù)進行操作(例如s * s)是有風險的。舉個例子,使用上面的函數(shù),運行perfsq(35)實際上會打印'yes'!!!
為了避免這些精度問題,首先檢查數(shù)字的平方根是否為 int 就足夠了。所以你的代碼可以大大簡化為:
import math
def perfsq(x):
if math.sqrt(x).is_integer():
print('yes')
這是使用該float.is_integer()
方法,基于math.sqrt
總是返回一個浮點數(shù)的事實。
添加回答
舉報