+ -
当前位置:首页 → 问答吧 → 有人能把这段代码改成python的吗【perl写的,结果发现在系统安装前没有perl,一下子感觉到perl成二等公民了】

有人能把这段代码改成python的吗【perl写的,结果发现在系统安装前没有perl,一下子感觉到perl成二等公民了】

时间:2011-10-28

来源:互联网

最近有点中毒,觉得把代码横着写是一件很恶毒的美感。
手段的话是利用Generator和Lambda,其中Lambda是基础,Generator是其上的一种抽象。

首先是算24的代码吧
代码:
#!python2
from itertools import *;from operator import *

calc24 = (lambda a,b,c,d:list(set(sum(((o(p(i,j),q(k,l))==24 and ["(%s%s%s)%s(%s%s%s)"%(i,ops[p],j,ops[o],k,ops[q],l)] or [])+(o(p(q(i,j),k),l)==24 and ["(((%s%s%s)%s%s)%s%s)"%(i,ops[q],j,ops[p],k,ops[o],l)] or []) for nums,opp in [((a,b,c,d),(add,sub,mul,lambda x,y:truediv(x,y) if y else float('nan')))] for ops in [dict(zip(opp,("+","-","*","/")))] for j,i,k,l in permutations(nums) for o,p,q in product(opp,repeat=3)),[]))))

测试结果是
代码:
>>> calc24(6,6,6,6)
['(6*6)-(6+6)', '(((6+6)+6)+6)', '(((6*6)-6)-6)', '(6+6)+(6+6)']


以后会接着来恶趣味几次的,有同样趣味的也一同来玩玩哦

====
前几天写的阶乘也很好玩,一并移过来吧
代码:
factorial=(lambda f:(lambda x:f(lambda *xs:x(x)(*xs)))(lambda x:f(lambda *xs:x(x)(*xs))))(lambda f:lambda x:not x and 1 or x*f(x-1))



判断质数的代码,貌似很多人都写过,比较简单
代码:
primep = (lambda x:(x==2 or (x>2 and x%2!=0 and all(x%i!=0 for i in xrange(3,int(sqrt(x))+1,2)))))


单行写一个创建通过创建素数表来判断素数的函数的函数,也是可以的
代码:
make_primep = (lambda m:(lambda s:s.__setslice__(0,3,[False,False,True]) or all((lambda f:(lambda x:f(lambda *xs:x(x)(*xs)))(lambda x:f(lambda *xs:x(x)(*xs))))(lambda f:lambda x:None if i*x>=m else s.__setitem__(i*x,False) or f(x+1))(2) for i in xrange(3,m,2) if s[i]) or (lambda x:s[x]))([False,True]*(m/2)))

测试结果是
代码:
>>> list(filter(make_primep(100),xrange(100)))
(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97)


最后由 ee.zsy 编辑于 2011-10-28 23:04,总共编辑了 8 次

作者: ee.zsy   发布时间: 2011-10-28

好吧,给我的感觉就是。。。我还是安分点学C语言

作者: 枫叶饭团   发布时间: 2011-10-28

我还是做我的码盲

作者: qy117121   发布时间: 2011-10-28

虽然没 lisp 括号多,但还是好多啊……

作者: jtshs256   发布时间: 2011-10-28

id是ee打头的....怪不得

作者: leeaman   发布时间: 2011-10-28

唉。。我还是去砍柴吧。

作者: remeber   发布时间: 2011-10-28

jtshs256 写道:
虽然没 lisp 括号多,但还是好多啊……

Python完全不是一门死板的语言,当作lisp来玩也是可以。
单行代码表面看起来晦涩,其实写起来轻松读起来简单的哦。

作者: ee.zsy   发布时间: 2011-10-29

ee.zsy 写道:
jtshs256 写道:
虽然没 lisp 括号多,但还是好多啊……

Python完全不是一门死板的语言,当作lisp来玩也是可以。
单行代码表面看起来晦涩,其实写起来轻松读起来简单的哦。

我觉得还是Lisp的代码看起来优美,行云流水~~~

说句不好听的,楼主不要生气啊——Python跟Lisp比,差远了

楼主饶命

作者: liu滔   发布时间: 2011-11-01

热门下载

更多