1 from random import randint 2 from itertools import permutations 3 #4个数组和3个运算符可能组成的表达式形式 4 exps = ('((%s %s %s) %s %s) %s %s', 5 '(%s %s %s) %s (%s %s %s)', 6 '(%s %s (%s %s %s) %s %s', 7 '%s %s ((%s %s %s) %s %s)', 8 '%s %s (%s %s (%s %s %s))') 9 ops = '+-*/' 10 11 def compose_24(v): 12 result = [] 13 #函数的嵌套定义 14 def check(exp): 15 try:#有可能会出现除0异常 16 return int(eval(exp)) == 24#计算字符串中有效的表达式,并返回结果 17 except: 18 return False 19 #全排列 20 # permutation()连续返回由 iterable 元素生成长度为 r 的排列 21 #如果 r 未指定或为 None ,r 默认设置为 iterable 的长度,这种情况下,生成所有全长排列。 22 for a in permutations(v): 23 t = [exp % (a[0], op1, a[1], op2, a[2], op3, a[3]) for op1 24 in ops for op2 in ops for op3 in ops for exp in exps if 25 check(exp % (a[0], op1, a[1], op2, a[2], op3, a[3]))] 26 if t: 27 result.append(t) 28 return result 29 30 card1, card2, card3, card4 = map(int, input('请输入四个扑克牌的大小: ').split(' ')) 31 lst = [card1, card2, card3, card4] 32 r = compose_24(lst) 33 if r: 34 print(r) 35 else: 36 print('No answer for ', lst)