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"这句还不太完善,不过解决这个问题足够了,具体怎么完善大家都知道拉.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值