我们的任务是编写一个加法函数add(),接收纯数字作为参数,并且可以实现一个有趣的链式加法,也就是如果我们调用add(1)(2)(3)
可以得到6
。
示例:
输入: add(1),返回:1
输入: add(1)(2)(3),返回:6
题目难度:中等
题目来源:codewars
def add_chain(n: int):
pass
assert add_chain(1) == 1
assert add_chain(1)(2) == 3
assert add_chain(1)(2)(3) == 6
1 个赞
class AddChain:
"""
链式加法类
"""
data = 0
# 实例化类时触发,并获取实例化参数
def __init__(self, n: int):
self.data += n
# 使用 == 比较时触发, other 为等号右边的值
def __eq__(self, other):
return self.data == other
# 被调用时触发,返回自身,实现无限链式调用
def __call__(self, n: int):
self.data += n
return self
def add_chain(n: int):
return AddChain(n)
assert add_chain(1) == 1
assert add_chain(1)(2) == 3
assert add_chain(1)(2)(3) == 6
assert add_chain(1)(2)(3)(4) == 10
class add_chain(int):
def __call__(self, n: int):
return add_chain(self + n)
assert add_chain(1) == 1
assert add_chain(1)(2) == 3
assert add_chain(1)(2)+2 == 5
assert add_chain(1)(2)(3) == 6
assert add_chain(1)(2)(3)(6) == 12
1 个赞
nobugs
4
有没有高手能帮我把括号去掉?
def add_chain(n: int):
sum_list = [n]
def add(m=None):
sum_list.append(m)
if sum_list[-1] is None:
return sum(sum_list[:-1])
return add
return add(0)
assert add_chain(1)() == 1
assert add_chain(1)(2)() == 3
assert add_chain(1)(2)(3)() == 6