【python】实现阶乘x!

来源:互联网 发布:编程达人 vip教程 编辑:程序博客网 时间:2024/05/01 20:43

y=x!=1*2*3*……*x

1.   循环实现

def f(n):    m = 1    for i in range(n+1):        m  *= i    return m

def f(n):    m=1    while n>1:        m=m*n        n-=1    return mprint f(5)
2.  递归实现
def f(n):    if n>1:        return n*f(n-1)    else:        return 1print f(5)

def f(n):    p = 1    if n > 1:        p = n*f(n-1)        print p    return pprint f(5)

3.  reduce方法

def foo(n):    return reduce(lambda x,y: x*y, range(1,n+1))

reduce函数:解析

python中的reduce内建函数是一个二元操作函数,他用来将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给reduce中的函数 func()(必须是一个二元操作函数)先对集合中的第1,2个数据进行操作,得到的结果再与第三个数据用func()函数运算,最后得到一个结果。

def myadd(x,y):       return x+y   sum=reduce(myadd,(1,2,3,4,5,6,7))   print sum

#结果就是输出1+2+3+4+5+6+7的结果即2

当然,也可以用lambda的方法,更为简单:

sum=reduce(lambda x,y:x+y,(1,2,3,4,5,6,7))   print sum 

lambda 变量名:表达式

ps:有个列表:['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']。需要找节点最多的一个(节点间由.分割)。看似简单的工作,要用pythonic的方法来做,还是要对python的内置函数有一定程度的熟悉,比如这里可以用最熟悉不过的max,但是会用到它并不常用的可选参数:key

node_list = ['a.b.c.d11u.e.f.g', 'e.f88.g', 'caa3.z.brr', 'z.48.ff.ee']max_node = max(node_list, key=lambda n: n.count('.'))

在这里,使用key参数改变了max比较列表元素的方法,达到了完成任务的目的

0 0
原创粉丝点击