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")
    
  • 相关阅读:
    RHEL6.5安装QT5.4,设置环境变量
    Oprofile安装与使用探索
    龙芯3A上V8的编译与测试
    C#穿透session隔离———Windows服务启动UI交互程序 be
    C#获取CPU与网卡硬盘序列号及Base64和DES加密解密操作类 be
    C#读取Excel转换为DataTable be
    WPF DataGrid ScrollBar Style be
    C#操作注册表 be
    C#读取Excel转为DataTable be
    C# DataTable与Excel读取与导出 be
  • 原文地址:https://www.cnblogs.com/Klay/p/15003541.html
Copyright © 2011-2022 走看看