我是否需要使用elif来解决这个问题?我该怎么办呢? 抱歉,这是一个巨大的菜鸟问题。
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
'''
答案 0 :(得分:4)
def hint1(*args):
return any(args)
any
函数采用iterable,如果其中的任何元素为真,则返回True
。
问题是any
采用可迭代的,而不是一堆单独的值。
这就是*args
的用途。它接受你所有的参数并将它们放在一个元组中,这个元组被输入到你的单个参数中。然后,您可以将该元组作为可迭代项传递给any
。有关详细信息,请参阅教程中的Arbitrary Argument Lists。
正如Elazar所指出的,这不适用于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.")
但实际上,在这种情况下使用静态参数列表要简单得多。
答案 1 :(得分:1)
关于你能得到的最短......
def hint1(p1,p2,p3,p4):
return any([p1,p2,p3,p4])
答案 2 :(得分:0)
any()
方法只需一次迭代,如果任何元素为真,则返回true。
def hint1(p1, p2, p3, p4):
return any([p1, p2, p3, p4])
答案 3 :(得分:-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