IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    24点

    Fish (fsh267@gmail.com)发表于 2015-01-05 00:00:00
    love 0

    今天在啄木鸟社区阅读FP相关的文章,wiki.woodpecker.org.cn/moin/fp4python。 在最后,作者写了一个24点计算程序,挺好玩的。

    但是算法不是很完整,我在百度Python贴吧上发现了一个比较犀利的程序段,更改了一下。 程序如下:

    import itertools
    
    formatList = ["((%f%s%f)%s%f)%s%f", "(%f%s%f)%s(%f%s%f)", 
                    "(%f%s(%f%s%f))%s%f", "%f%s(%f%s%f%s%f)",
                    "%f%s(%f%s(%f%s%f))"]
    
    opList = itertools.product(['+', '-', '*', '/'], repeat = 3)
    def match24(fmt, nums, ops):
        a, b, c, d = nums
        op1, op2, op3 = ops
        expr = fmt % (a, op1, b, op2, c, op3, d)
        try:
            res = eval(expr)
        except ZeroDivisionError:
            return 
        if abs(res - 24) < 0.0001:
            print expr, "= 24"
    def calc(numlist):
        for op in opList:
            for fmt in formatList:
                match24(fmt, numlist, op)
    if __name__ == '__main__':
        nums = raw_input("please input four numbers:\n")
        seq = [float(i) for i in nums.split(' ')]
        for l in itertools.permutations(seq):
            calc(l)

    #END



沪ICP备19023445号-2号
友情链接