zoukankan      html  css  js  c++  java
  • 24点python实现

    题目:

    有四张扑克牌,每张为2-A,10以上的J、Q、K、A按1算,加减任意顺序组合,能否算出24点。
    例如
    10、10、3、A,10+10+3+A=24,返回true
    A、A、A、A,算不出24,返回false

    题意分析

    1、4张牌最少要有3张相加才能等于24
    2、加减任意那么有:A+B+C+D、-A+B+C+D、A-B+C+D、A+B-C+D、A+B+C-D 一共5种情况

    代码实现1:直接套5种情况

    def point24(string):
        inp = (
            string.replace("A", "1")
            .replace("J", "1")
            .replace("Q", "1")
            .replace("K", "1")
            .rsplit("、")
        )
    
        k = ["%s+%s+%s+%s", "-%s+%s+%s+%s", "+%s-%s+%s+%s", "+%s+%s-%s+%s", "%s+%s+%s-%s"]
        flag = False
        for i in range(len(k)):
            a = eval(k[i] % (inp[0], inp[1], inp[2], inp[3]))
            if a == 24:
                flag = True
                break
        return flag
    
    
    if __name__ == "__main__":
        # 单元测试 覆盖
    
        fn = point24_
        assert fn("10、10、4、1") is False
        assert fn("10、10、3、A")
        assert fn("10、10、10、10") is False
        assert fn("6、10、10、10")
        assert fn("10、6、10、10")
        assert fn("10、10、6、10")
        assert fn("10、10、10、6")
        assert fn("1、10、5、10")
    
    

    代码实现2:排序后再进行运算

    def point24_(string):
        inp = (
            string.replace("A", "1")
                .replace("J", "1")
                .replace("Q", "1")
                .replace("K", "1")
                .rsplit("、")
        )
        inp = [int(i) for i in inp]
        inp.sort()
        inp.reverse()
        s = 0
        for i in range(len(inp)):
            if s < 24:
                if (s + int(inp[i])) == 24 and i == 3:
                    return True
                else:
                    s += int(inp[i])
            elif (s - int(inp[i])) == 24:
                return True
        else:
            print(inp)
            return False
    
    
    if __name__ == "__main__":
        # 单元测试 覆盖
    
        fn = point24_
        assert fn("10、10、4、1") is False
        assert fn("10、10、3、A")
        assert fn("10、10、10、10") is False
        assert fn("6、10、10、10")
        assert fn("10、6、10、10")
        assert fn("10、10、6、10")
        assert fn("10、10、10、6")
        assert fn("1、10、5、10")
    
  • 相关阅读:
    进程与线程
    the art of seo(chapter seven)
    the art of seo(chapter six)
    the art of seo(chapter five)
    the art of seo(chapter four)
    the art of seo(chapter three)
    the art of seo(chapter two)
    the art of seo(chapter one)
    Sentinel Cluster流程分析
    Sentinel Core流程分析
  • 原文地址:https://www.cnblogs.com/Klay/p/15003541.html
Copyright © 2011-2022 走看看