2013-07-07 54 views
2

我寫了這個python函數,它將一個列表作爲參數,並確定列表中的哪些元素是完美的正方形,然後返回這些選擇元素的新列表。完美方塊上的Python程序

這裏是我的功能:

def square(n): 
    return n**2 

def perfectSquares1(L): 
    import math 
    m=max(L) 
    for n in L: 
     if type(n) is int and n>0: 
      Result=map(square,range(1,math.floor(math.sqrt(m)))) 
      L1=list(Result) 
    L2=list(set(L).intersection(set(L1))) 
    return L2 

但是現在我想重新工作了一點:我想寫一個線布爾函數採用N作爲參數,並返回true n是一個完美的正方形,否則返回false。

有什麼建議嗎?我無法想出一個辦法讓它只有一行。

回答

3

你可以這樣做:

import math 
def perfect_sq(n): 
    return n == int(math.sqrt(n)) * int(math.sqrt(n)) 

或者你可以使用:

import math 
def perfect_sq(n): 
    return n == int(math.sqrt(n)) ** 2 
+0

不是我的downvote,但是' perfect_sq(11)'返回True。 – DSM

+0

我怎樣才能讓函數返回'真',雖然? – user2553807

+0

每個數字都是一個完美的正方形,11是11 ** 0.5的完美平方。如果我們談論整數,這個問題只會很有趣。 – Akavall

5
lambda n: math.sqrt(n) % 1 == 0 
+0

但是,我怎樣才能得到返回'真'和'假'的函數呢? – user2553807

+0

這是一個布爾值,因此你會像其他任何條件測試一樣得到真或假。 – hd1

+0

調用它。 '(lambda n:math.sqrt(n)%1 == 0)(16)'。或'sq = lambda n:math.sqrt(n)%1 == 0;平方(16)'。 –

1

可以使用模運算符:

>>> def perfectsquare(n): 
...  return not n % n**0.5 
... 
>>> perfectsquare(36) 
True 
>>> perfectsquare(37) 
False 
>>> perfectsquare(25) 
True 
>>> perfectsquare(4215378*4215378) 
True