以前入门python的时候为了让自己学得更有兴趣一些,自己写了一段代码来计算二十四点,现在贴出来
from fractions import Fraction #Fraction用来做分数运算很好用 def oper_func(dict_x, dict_y): ''' :param dict_x:上一次的计算结果的字典 key为运算过程 value是计算值 :param dict_y:上一次的计算结果的字典 key为运算过程 value是计算值 :return: ''' def add(x, y): result = x + y oper_desc = str(x) + ' + ' + str(y) + ' = ' + str(result) return result, oper_desc def sub(x, y): result = x - y oper_desc = str(x) + ' - ' + str(y) + ' = ' + str(result) return result, oper_desc def sub_reverse(x, y): return sub(y, x) def mul(x, y): result = x * y oper_desc = str(x) + ' * ' + str(y) + ' = ' + str(result) return result, oper_desc def div(x, y): if y == 0: result = 0 oper_desc = str(x) + ' * ' + str(y) + ' = ' + str(result) else: result = Fraction(x, y) oper_desc = str(x) + ' / ' + str(y) + ' = ' + str(result) return result, oper_desc def div_reverse(x, y): return div(y, x) dict_result = {} opers = [add, sub, sub_reverse, mul, div, div_reverse] for kx in dict_x.keys(): for ky in dict_y.keys(): for oper in opers: if len(kx) != 1: k1 = kx + ' | ' else: k1 = '' if len(ky) != 1: k2 = ky + ' | ' else: k2 = '' result, oper_desc = oper(dict_x[kx], dict_y[ky]) dict_result[k1 + k2 + oper_desc] = result return dict_result def cal_list(dict_list, calc_result): in_list = dict_list.copy() for i in range(len(in_list)): for j in range(len(in_list)): if i < j: dict_result = oper_func(in_list[i], in_list[j]) if len(in_list) == 2: for k in dict_result.keys(): calc_result[k] = dict_result[k] else: next_list = [] next_list.append(dict_result) for k in range(len(in_list)): if k != i and k != j: next_list.append(in_list[k]) cal_list(next_list, calc_result) def cal_main(*args): dict_list = [] for i in range(len(args)): dict_list.append({str(i): args[i]}) calc_result = {} cal_list(dict_list, calc_result) out_list = [] for k in calc_result.keys(): if calc_result[k] == 24: #下面一个语句就是用来排版的,把竖线对齐 k = '|'.join(x.rjust(15) for x in k.split('|')) out_list.append(k) if not out_list: out_list.append('No!!!!!!!!!') return out_list #下面是测试语句 result_list = cal_main(3, 6, 7, 1) for i in result_list: print(i)