我必须计算一个元组中的对数。我不能在一段时间或时间里使用。它必须是一个递归函数。我必须具有的结果是,例如:
TotalMoney
这是我到目前为止所拥有的:
count_pairs((4, 5, 6))
2
count_pairs(())
()
count_pairs((3, 5, 7))
0
我的困难是,如果给我一个空的元组,如何返回()。因为我得到的每个结果都是()。有点不对劲。你能帮我么?我是Python的初学者。谢谢
答案 0 :(得分:2)
一种简单的编写方法是将当前元素(t
的第一个元素)的结果存储在变量(this
)中,并将对(偶数个元素)的结果存储在另一个变量(rest
)。然后,如果rest
具有“真实值”(它不是一个空的元组),则可以向该元素返回0
或1
;否则,您只返回该数字,而不将两者连接在一起。
也就是说,
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:])