#!/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()