#题目:求1+2!+3!+...+20!的和。
#!/usr/bin/python 3
# -*- coding: UTF-8 -*-
def _fact1_(n):
if n == 1:
return 1
else:
return n*_fact1_(n-1)
def _fact2_(n):
if n == 1:
return 1
else:
lss = list(range(1,n+1))
r = 1
for ls in lss:
r *= ls
return r
n = int(input("n:"))
sum1 = sum2 = 0
for i in range(1,n+1):
sum1 += _fact1_(i)
sum2 += _fact2_(i)
print("算法1: {}项的总和为{}".format(n, sum1))
print("算法2: {}项的总和为{}".format(n, sum2))
想了想,应该还有第三种算法,居然把最基本的嵌套结构丢下了,罪过罪过。
n = int(input("n:"))
sum = 0
for i in range(1, n+1):
mulit = 1
for j in range(1, i+1):
mulit *= j
sum += mulit
print("算法3:{}项的总和为{}".format(n, sum))
新学了reduce,用上:
from functools import reduce
def mu(x,y):
return x*y
def getlist(n):
return range(1,n+1)
def sum(n):
sum = 0
for i in range(1,n+1):
sum += reduce(mu, getlist(i))
return sum
s = eval(input("Please enter a number:"))
print(sum(s))
再进一步优化一下:
from functools import reduce
n = int(input())
list = []
for i in range(1,n+1):
list.append(reduce(lambda x,y: x*y, range(1,i+1)))
sum = reduce(lambda x,y: x+y, list)
print(sum)