Python Challenge 25: 求1+2!+3!+...+20!的和

这篇博客探讨了如何使用Python进行一个挑战,即求解1到20的阶乘之和,提到了利用reduce函数进行优化的算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#题目:求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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值