zoukankan      html  css  js  c++  java
  • 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()
    

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

  • 相关阅读:
    PHP 之ZIP压缩与解压缩文件
    xmind8 破解激活教程
    MIT 6.824 RPC 和多线程
    [AGC019E]Shuffle and Swap
    [CF1060F] Shrinking Tree
    【算法与数据结构】前序中序后序线索化二叉树及遍历
    绘画参考 多角度透视手的动作姿态线稿
    数学概率期望总结
    C#中方法、类等的默认访问修饰符~
    mysql 设置连接超时
  • 原文地址:https://www.cnblogs.com/qianxunman/p/14312504.html
Copyright © 2011-2022 走看看