Python方法解扑克牌24点游戏代码

#!/usr/bin/python
# coding:utf-8
'''
简介:本脚本用于计算24点
'''
import math,sys,os

def _cal(a,b):
    temp={'+':a+b,'-':a-b,'--':b-a,'*':a*b}
    if b!=0 and a!=0:
        temp['/']=float(a)/b
        temp['\\']=float(b)/a
    return temp

def cal(num):
    for i0 in num:
        for i1 in num:
            if i1==i0:
                continue
            else:
                for i2 in num:
                    if i2==i1 or i2==i0:
                        continue
                    else:
                        for i3 in num:
                            if i3==i1 or i3==i0 or i3==i2:
                                continue
                            else:
                                temp1=_cal(num[i0],num[i1])
                                for k1 in temp1:
                                    temp2=_cal(temp1[k1],num[i2])
                                    for k2 in temp2:
                                        temp3=_cal(temp2[k2],num[i3]) 
                                        for k3 in temp3:
                                            if temp3[k3]==24:
                                                print '((%d%s%d)%s%d)%s%d=24' %(num[i0],k1,num[i1],k2,num[i2],k3,num[i3])
                                                return True
    return False
    print 'fail'

#www.iplaypy.com
#单独测试一组
test=[1,2,4,9]
num={1:test[0],2:test[1],3:test[2],4:test[3]}
cal(num)

'''
#查看所有的无解组
Max=15
fail=0
failist=[]
for i1 in range(1,Max):
    for i2 in range(1,Max):
        for i3 in range(1,Max):
            for i4 in range(1,Max):
                num={1:i1,2:i2,3:i3,4:i4}
                if not cal(num):
                    temp=[num[1],num[2],num[3],num[4]]
                    temp.sort()
                    if temp not in failist:
                        failist.append(temp)
                        fail=fail+1

print failist
print 'all:%d,fail:%d' %(15**4,fail)
#无解个数721
'''