递归函数-计算元组中的偶数

时间:2018-12-19 15:39:32

标签: python tuples

我必须计算一个元组中的对数。我不能在一段时间或时间里使用。它必须是一个递归函数。我必须具有的结果是,例如:

TotalMoney

这是我到目前为止所拥有的:

count_pairs((4, 5, 6))   
2
count_pairs(())
()
count_pairs((3, 5, 7))
0

我的困难是,如果给我一个空的元组,如何返回()。因为我得到的每个结果都是()。有点不对劲。你能帮我么?我是Python的初学者。谢谢

2 个答案:

答案 0 :(得分:2)

一种简单的编写方法是将当前元素(t的第一个元素)的结果存储在变量(this)中,并将对(偶数个元素)的结果存储在另一个变量(rest)。然后,如果rest具有“真实值”(它不是一个空的元组),则可以向该元素返回01;否则,您只返回该数字,而不将两者连接在一起。

也就是说,

def count_pairs(t):
    if len(t) == 0:
        return ()
    rest = count_pairs(t[1:])
    this = t[0] % 2 == 0
    return this + rest if rest else this

工作正常:

>>> count_pairs((4, 5, 6))
2
>>> count_pairs(())
()
>>> count_pairs((3, 5, 7))
0

但是,正如您在注释中所忽略的那样,实际上,为空元组而不是另一个空元组返回0确实有意义。这是因为一个函数通常应该返回相同的数据类型(在Python中不是为了使您的代码更灵活而强制使用,但是其他语言绝对是必需的。)

如果这样做的话,代码也会变得更加整洁:

def count_pairs(t):
    if len(t) == 0:
        return 0
    return (t[0] % 2 == 0) + count_pairs(t[1:])

现在表现得更自然(我认为是):

>>> count_pairs((4, 5, 6))
2
>>> count_pairs(())
0
>>> count_pairs((3, 5, 7))
0

脚注

我只想指出,语句t[0] % 2 == 0等同于1 if t[0] % 2 == 0 else 0,因为1等同于True,而0等同于{ {1}},在Python中。这样可以使代码更简洁。

答案 1 :(得分:0)

在python2中

def count_pairs(tup):
    if len(tup) == 0:
        return ()
    elif len(tup) == 1:
        return (tup[0] + 1) % 2
    else:
        return ((tup[0] + 1) % 2) + count_pairs(tup[1:])