#分析:
#5!+4!+3!+2!+1
#对于一个数字的阶乘
reduce(lambda x,y:x*y,range(1,6))
#对于一组数字的加法
reduce(lambda x,y:x+y,range(1,6))
#如果我们用代数的方法,就是把range[1,6]这个数组换成,每个元素为1-5每个阶乘就行了
#[5!,4!,3!,2!,1!]
#最笨得方法就是手动写5个,在笨一点就是for循环5个出来
#这是第一个版本,甚至连map都没有
def singles():
singles=[]
for i in range(1,6):
t=reduce(lambda x,y:x*y,range(1,i+1))
singles.append(t)
return singles
#singles()
print reduce(lambda x,y:x+y,singles())
#试试把上面一部分精简下,我们发现可以用列表解析
[reduce(lambda x,y:x*y,range(1,i+1)) for i in range(1,6)]
print reduce(lambda x,y:x+y,[reduce(lambda x,y:x*y,range(1,i+1)) for i in range(1,6)])
#但是我们还是没有用到map,原来我们可以用,map生成由个单个元素的阶乘的list
map(lambda z :reduce(lambda x,y:x*y,range(1,z+1)) ,range(1,6)) #好像没办法把后面的元素传递到reduce函数里面,怎么办呢
#那我只好把reduce再次封装到一个lambda里了
print reduce(lambda x,y:x+y,map(lambda z :reduce(lambda x,y:x*y,range(1,z+1)) ,range(1,6)) )
#问题一步步拆解还是很好解决的,不是么