`
hereson
  • 浏览: 1427732 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

python 的算24点程序

 
阅读更多

今天在网上同学求教1 5 6 7 +-*/ 算出21.  自己曾经写过一个,但代码找不到了,偶知道24点的程序很多的说于是到网上搜了一下.

是有不少但是一个用c++(其实根本就不能叫用c++,全是c的语法), 试了n多次,borlandc3.1gcc都不能编译还找到了vb,web版的,看来都没用.  在偶找东西搞得焦头烂额的时候,偶同学自己算出来了.(到底怎么算用这个程序试试吧)

 

为了以后不被这种问题困扰,花一个小时用python自己写了一个,还是python~~~~~~~

 

funs = [ lambda x, item: (x+item[0],

                               str(x)+'+('+item[1]+')'

                              ),

      lambda x, item: (x-item[0],

                               str(x)+'-('+item[1]+')'

                              ),

      lambda x, item: (item[0]-x,

                               '('+item[1]+')-'+str(x)

                              ),

      lambda x, item: (x*item[0],

                               str(x)+'*('+item[1]+')'

                              ),

      lambda x, item:   (item[0]==0 and (0,'ZZZ')) or /

                        (x/item[0],

                               str(x)+'/('+item[1]+')'

                              ),

      lambda x, item:   (x==0 and (0,'ZZZ')) or /

                        (item[0]/x,

                               '('+item[1]+')/'+str(x)

                              )

]

 

def con(num):

    l = len(num)

    p = list()

    if l==1: return {num[0]:str(num[0])}

    for i in range(l):

        for f in funs:

            p += map(lambda item: f(num[i],item),

                       con(num[:i]+num[i+1:]).items()

                    )

    return dict(p)

 

print con(map(float,[1,5,6,7])).get(21.0,0)

 

 

代码我就不解释了,有问题就问吧.

 

另外由于浮点计算的误差问题,".get(21.0,0"这句还不太完善,不过解决这个问题足够了,具体怎么完善大家都知道拉.

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics