2013-05-29 3 views
-4

Нужно ли использовать elif для этого вопроса? Как мне это сделать? Извините за вопрос о мега-нобе.Булевы параметры для 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

или 'return 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() занимает один итерацию и возвращает true, если любой элемент равен t руты.

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

@ Элазар: Но исходный вопрос не утверждает этого требования нигде. – abarnert

+0

+1 - Для использования '* args' –

Смежные вопросы