import itertools
def changeToFloatStr(int): return str(int + 0.0)
input = input('input 4 numbers,like "1,2,3,4"\n')
nums = list(input)
expressions = ['A op B op C op D', '(A op B) op C op D', '(A op B op C) op D', 'A op (B op C) op D',
'A op B op (C op D)', 'A op (B op C op D)', '(A op B) op (C op D)']
ops = ['+', '-', '*', '/']
allNums = list(itertools.permutations(nums, 4))
ops1 = ops2 = ops3 = ops[:]
results = []
for allNum in allNums:
for expression in expressions:
opStr = expression[:]
opStr = opStr.replace('A', changeToFloatStr(allNum[0])).replace('B', changeToFloatStr(allNum[1])). \
replace('C', changeToFloatStr(allNum[2])).replace('D', changeToFloatStr(allNum[3]))
result = [opStr.replace('op', op1, 1).replace('op', op2, 1).replace('op', op3, 1)
for op1 in ops1 for op2 in ops2 for op3 in ops3]
try:
for x in result:
(eval(x) == 24.0) and results.append(x.replace('.0', ''))
except ZeroDivisionError:
pass
for x in results: print x
的确比JAVA写起来简单啊