如果存在具有通过测试测试的值的Tree节点,则返回True
的函数如果没有这样的值则返回False
。这里我遇到了第一个文档字符串示例def greater_than_nine(n): return n > 9
的问题。如您所见,10.5大于9,因此contains_test_passer应返回True。但我很难放置返回False语句。现在,该函数始终返回False。有人可以帮忙吗?
def contains_test_passer(t, test):
"""
Return whether t contains a value that test(value) returns True for.
@param Tree t: tree to search for values that pass test
@param (object)->bool test: predicate to check values with
@rtype: bool
>>> t = descendants_from_list(Tree(0), [1, 2, 3, 4.5, 5, 6, 7.5, 10.5], 4)
>>> def greater_than_nine(n): return n > 9
>>> contains_test_passer(t, greater_than_nine)
True
>>> def even(n): return n % 2 == 0
>>> contains_test_passer(t, even)
True
"""
if test(t.value):
return True
else:
for x in t.children:
contains_test_passer(x,test)
return False
答案 0 :(得分:2)
因为contains_test_passer
返回一个布尔值,你只需要捕获递归调用的值:
for x in t.children:
if contains_test_passer(x,test):
return True
return False
答案 1 :(得分:2)
我会使用any
:
return test(t.value) or any(contains_test_passer(x, test) for x in t.children)
如果对contains_test_passer
的任何调用返回True,则返回True,否则返回False。它的行为完全几乎与Tadhg McDonald-Jensen的答案中的代码相同,但我认为它更具可读性。