• python 算法4个数按照随机四则运算算出结果为24的值


    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    
    """
    @author: 
    @version: 1.0.0
    @file: test_24.py
    @time: 2021/1/22 上午9:04
    @desc: 输入的4个数据,用加减乘除运算符来计算出能够凑出24
    """
    
    from pprint import pprint
    from itertools import permutations, combinations
    import operator
    from copy import deepcopy
    
    
    def func(*args):
        list_operate = ['+', '-', '*', '/']
        for op1 in list_operate:
            for op2 in list_operate:
                for op3 in list_operate:
                    # print(op3)
                    list_calc = [args[0], op1, args[1], op2, args[2], op3, args[3]]
                    res = recall_clac_list(deepcopy(list_calc))
                    # print(res)
                    if res == 24:
                        # print(list_calc)
                        # print(''.join([str(i) for i in list_calc]))
                        return ''.join([str(i) for i in list_calc])
    
    
    def recall_clac_list(list_calc):
        if '*' in list_calc or '/' in list_calc:
            for index, value in enumerate(list_calc):
                if value in ['*', '/']:
                    calc_value = calc(value, list_calc[index - 1], list_calc[index + 1])
                    list_calc2 = list_calc
                    [list_calc2.pop(index - 1) for i in range(3)]
                    list_calc2.insert(index - 1, calc_value)  # 指针会超出
                    if len(list_calc2) == 1:
                        return list_calc2[0]
                    return recall_clac_list(list_calc2)
        else:
            for index, value in enumerate(list_calc):
                if value in ['+', '-']:
                    calc_value = calc(value, list_calc[index - 1], list_calc[index + 1])
                    list_calc2 = list_calc
                    [list_calc2.pop(index - 1) for i in range(3)]
                    list_calc2.insert(index - 1, calc_value)  # 指针会超出
                    if len(list_calc2) == 1:
                        return list_calc2[0]
                    return recall_clac_list(list_calc2)
    
    
    def calc(operation, v1, v2):
        return get_operate_method(operation)(v1, v2)
    
    
    def get_operate_method(operation):
        dict_operator = {
            '+': operator.add,
            '-': operator.sub,
            '*': operator.mul,
            '/': operator.truediv
        }
        return dict_operator.get(operation)
    
    
    def main():
        """
        测试对列表操作后循环是否会受到影响
        :return:
        """
        # list1 = [i for i in range(10)]
        # for index, value in enumerate(list1):
        #     print(index, value)
        #     print(list1)
        #     list1.pop(0)
        #
        list_value = [1, 2, 6, 9]
        res = permutations(list_value, 4)
        for i in res:
            res = func(*i)
            print(res)
    
    
    if __name__ == '__main__':
        main()
    

    懂得,原来世界如此简单!

  • 相关阅读:
    电脑无损换硬盘,不用重装系统驱动的小技巧
    OSPF协议原理及配置5-LSA分析
    OSPF协议原理及配置3-邻居关系的建立
    OSPF协议原理及配置2-理解邻居和邻接关系
    我在华为写代码
    嵌入式未来发展
    blog to live,do not love to blog
    浮点数转换为新类型时必须做范围检查
    分享点干货
    基础C语言知识串串香14☞增补知识
  • 原文地址:https://www.cnblogs.com/qianxunman/p/14312504.html
Copyright © 2020-2023  润新知