2013-05-07 19 views

回答

13

一種方法是

int(math.sqrt(x)) ** 2 == x 
7

因爲math.sqrt總是返回一個浮點數,你可以使用內置的is_integer方法

def is_square(x): 
    answer = math.sqrt(x) 
    return answer.is_integer() 

這將返回True如果x是一個正方形和False如果它不是

>>> is_square(25) 
True 
>>> is_square(14) 
False 
+0

嗯。由於在計算過程中出現四捨五入錯誤,將浮點數視爲不精確,是否會發生方數的sqrt()最終不會成爲整數?這會讓@ larsmans的回答更好。 – millimoose 2013-05-07 18:54:24

+0

這是一個有效的點,但我只是運行了一個for循環,使用這種方法可以打印出所有有效的正方形高達100,000,並且它不會錯過任何一個。 – 2013-05-07 19:04:10

+0

整數完全以浮點形式表示(它們在點之後全部爲零)。不過,我不確定'sqrt'是否可以保證這一點。 – 2013-05-07 19:18:59

1

嘗試:

math.sqrt(nodes) == int(math.sqrt(nodes)) 
+0

這將不起作用,因爲浮標的不精確性。如果'math.sqrt(節點)'和'int(math.sqrt(節點))'之間的差異大於'sys.float_info.epsilon',那麼你運氣不好。 – MattDMo 2013-05-07 19:06:49

+0

你的意思是_smaller_比'sys.float_info.epsilon'嗎?否則我很困惑... – 2013-05-07 19:19:23

+0

更大。如果差值大於ε,則系統認爲它們不相等,並且表達式返回「False」。 – MattDMo 2013-05-07 20:35:06

相關問題