2013-05-29 86 views
-4

我需要爲這個問題使用elif嗎?我該如何解決它? 對不起,這個超級noob問題。Python的布爾參數3

def hint1(p1, p2, p3, p4): 
    ''' (bool, bool, bool, bool) -> bool 
    Return True iff at least one of the boolen parameters 
    p1, p2, p3, or p4 is True. 
    >>> hint1(False, True, False, True) 
    True 
    ''' 
+1

'def hint1(* args):return any(args)' – abarnert

+0

嚴重的是,您提供了哪些學習資料?這是一個基本問題,你的學習資料應該包含你需要的答案。 – Marcin

回答

-2

你可以嘗試

def hint1(p1,p2,p3,p4): 
    if p1 or p2 or p3 or p4: 
     return True 

或者

def hint1(p1,p2,p3,p4) 
    if p1: 
     return True 
    if p2: 
     return True 
    if p3: 
     return True 
    if p4: 
     return True 
    return False 
+1

或'返回p1或p2或p3或p4'。但「任何」都是正確的。 – Elazar

+0

謝謝!我還沒有在課堂上學到任何功能,所以這是最有幫助的! – user2425814

1

關於儘可能短,你可以得到...

def hint1(p1,p2,p3,p4): 
    return any([p1,p2,p3,p4]) 
+1

'hint1 = lambda * x:any(x)'。較短:P – Elazar

0

any()方法接受一個可迭代和如果任何元素是t,則返回true後悔。

def hint1(p1, p2, p3, p4): 
    return any([p1, p2, p3, p4]) 
4
def hint1(*args): 
    return any(args) 

any函數採用一個可迭代,並返回True如果它的任何元素是真實的。

問題是,any需要一個可迭代的,而不是一堆單獨的值。

這就是*args的用途。它將所有的參數都放在一個元組中,並將它們放入單個參數中。然後,您可以將該元組傳遞給any作爲迭代器。有關更多詳細信息,請參閱教程中的Arbitrary Argument Lists


由於埃拉扎爾指出,這並不整整4個參數的工作,它適用於任何參數的數目(甚至爲0)。這是好還是壞取決於你的用例。

如果你想獲得3個參數或5的錯誤,你當然可以添加一個明確的測試:

if len(args) != 4: 
    raise TypeError("The number of arguments thou shalt count is " 
        "four, no more, no less. Four shall be the " 
        "number thou shalt count, and the number of " 
        "the counting shall be four. Five shalt thou " 
        "not count, nor either count thou three, " 
        "excepting that thou then proceed to four. Six " 
        "is right out.") 

但實際上,這是更簡單,只需使用一個靜態的參數列表的話。

+0

+1,與原始問題有一點不同 - 它沒有嚴格執行「4個參數」。 – Elazar

+2

@Elazar:但原來的問題沒有在任何地方說明這一要求。 – abarnert

+0

+1 - 對於使用'* args' –