本文共 9255 字,大约阅读时间需要 30 分钟。
本文主要根据中奖类别输出所有中奖号码,双色球奖项分为6种,如下所示:
一等奖(6+1)中奖概率为:红球33选6乘以蓝球16选1=1/17721088=0.0000056%; 二等奖(6+0)中奖概率为:红球33选6乘以蓝球16选1=15/17721088=0.0000846%; 三等奖(5+1)中奖概率为:红球33选5乘以蓝球16选1=162/17721088=0.000914%; 四等奖(5+0、4+1)中奖概率为:红球33选5乘以蓝球16选0=7695/17721088=0.0434%; 五等奖(4+0、3+1)中奖概率为:红球33选4乘以蓝球16选0=137475/17721088=0.7758%; 六等奖(2+1、1+1、0+1)中奖概率为:红球33选2乘以蓝球16选1=1043640/17721088=5.889%; 共计中奖率:6.71%。
根据双色球种类,笔者将其进行如下归类。左边红球表示1到6-右边蓝球表示7,*表示不同的个数,.表示相同的个数,以下计算都约定红球升序。
1)综合预览
该部分计算各项中奖数量、中奖率等问题:
# -*- coding:utf-8 -*-def fn(x): ret = 1 for i in range(1,x+1): ret = ret*i return retdef cn(x,y): ret = fn(x)/(fn(y)*fn(x-y)) return retif __name__=='__main__': ret = 16*cn(33,6) print('All:',ret) ret1 = 1 print('L1',ret1) ret2 = 15 print('L2',ret2) ret3 = cn(6,5)*27 print('L3',ret3) ret4 = cn(6,5)*27*15+cn(6,4)*cn(27,2) print('L4',ret4) ret5 = cn(6,4)*cn(27,2)*15+cn(6,3)*cn(27,3) print('L5',ret5) ret6 = cn(6,2)*cn(27,4)+cn(6,1)*cn(27,5)+cn(27,6) print('L6',ret6) retSum = ret1+ret2+ret3+ret4+ret5+ret6 print('retSum:',retSum) print('Rate:',1.0*retSum/ret)
2)单项实现
根据约定,笔者将1-6等奖的抽象分布归纳如下:
Level1:包括 ......-.
L1只包括1种情况,sum=1Level2:包括 ......-*
L2只包括1类,sum=15=1*15Level3:包括 .....*-.
L3只包括1类,sum=162=C(6,5)*C(27,1)*1 说明:红球5个相同1个不同C(6,5)*C(27,1),蓝球相同Level4:包括 .....*-* 和 ....**-.
L4包括2类,sum=7695=L3*15+C(6,4)*C(27,2)*1 L4_1:.....*-* 说明:红球5个相同1个不同C(6,5)*C(27,1),蓝球不同C(15,1),即L3*15 L4_2:....**-. 说明:红球4个相同2个不同C(6,4)*C(27,2),蓝球相同Level5:包括 ....**-* 和 ...***-.
L5包括2类,sum=137475=L4_2*15+C(6,3)*C(27,3)*1 L5_1:....**-* 说明:红球4个相同2个不同C(6,2)*C(27,4),蓝球不同C(15,1),即L4_2*15 L5_2:...***-. 说明:红球3个相同3个不同C(6,3)*C(27,3),蓝球相同Level6:包括 ..****-. 和 .*****-. 以及 ******-.
L6包括3类,sum=1188988=C(6,2)*C(27,4)*1+C(6,1)*C(27,5)*1+C(27,6)*1 L6_1:..****-. 说明:红球2个相同4个不同C(6,2)*C(27,4),篮球相同 L6_2:.*****-. 说明:红球1个相同5个不同C(6,1)*C(27,5),篮球相同 L6_3:******-. 说明:红球0个相同6个不同C(27,6),篮球相同代码如下:
# -*- coding:utf-8 -*-import csvdef SaveToCSV(dataList,fileName,rwtype='w'): with open(fileName, rwtype, newline='') as csvfile: writer = csv.writer(csvfile) for row in dataList: writer.writerow(row)def Level1(lsList): print('\nL1',lsList) print('......-.') retList = [lsList] return retListdef Level2(lsList): print('\nL2',lsList) print('......-*') retList = [] for i in range(1,17): tmp = lsList[0:] if(i != lsList[6]): tmp[6] = i retList.append(tmp) return retListdef Level3(lsList): print('\nL3',lsList) print('.....*-.') retList = [] leftList = [] #save numbers that can be used lsList6 = lsList[0:6] for i in range(1,34): if(i not in lsList6): leftList.append(i) lsList5 = [] #save lists which contain 5 numbers in lslist for i in range(0,len(lsList)-1): lsListBak = lsList[0:] lsListBak.remove(lsList[i]) lsList5.append(lsListBak) for i in lsList5: for j in leftList: tmp = i[0:5] tmp.append(j) tmp.sort() retList.append(tmp) retList.sort() for i in retList: i.append(lsList[6]) return retListdef Level4_1(lsList): retList = [] retListL3 = Level3(lsList) for i in range(1,17): if(i != lsList[6]): for j in retListL3: tmp = j[0:] tmp[6] = i retList.append(tmp) retList.sort() return retListdef Level4_2(lsList): retList = [] lsListLeft = lsList[0:6] #get all C(6,4) lsList6_4 = [] lsList6_2 = [] for i in range(0,5): for j in range(i+1,6): tmpList = [lsListLeft[i],lsListLeft[j]] lsList6_2.append(tmpList) for i in lsList6_2: tmpList = lsListLeft[0:] tmpList.remove(i[0]) tmpList.remove(i[1]) lsList6_4.append(tmpList) #get all C(27,2) lsList27 = [] for i in range(1,34): if(i not in lsListLeft): lsList27.append(i) lsList27_2 = [] for i in range(0,26): for j in range(i+1,27): tmpList = [lsList27[i],lsList27[j]] lsList27_2.append(tmpList) #get all C(6,4) and C(27,2) for i in lsList6_4: for j in lsList27_2: tmpList = i[0:] tmpList.append(j[0]) tmpList.append(j[1]) tmpList.sort() tmpList.append(lsList[6]) retList.append(tmpList) retList.sort() return retListdef Level4(lsList): print('\nL4',lsList) retList = [] print('.....*-*') retList4_1 = Level4_1(lsList) print('....**-.') retList4_2 = Level4_2(lsList) for i in retList4_1: retList.append(i) for i in retList4_2: retList.append(i) retList.sort() return retListdef Level5_1(lsList): retList = [] retList4_2 = Level4_2(lsList) for i in range(1,17): if(i != lsList[6]): for j in retList4_2: tmp = j[0:] tmp[6] = i retList.append(tmp) retList.sort() return retListdef Level5_2(lsList): retList = [] lsListLeft = lsList[0:6] #get all C(6,3) lsList6_3 = [] for i in range(0,4): for j in range(i+1,5): for k in range(j+1,6): tmpList = [lsListLeft[i],lsListLeft[j],lsListLeft[k]] lsList6_3.append(tmpList) #get all C(27,3) lsList27 = [] for i in range(1,34): if(i not in lsListLeft): lsList27.append(i) lsList27_3 = [] for i in range(0,25): for j in range(i+1,26): for k in range(j+1,27): tmpList = [lsList27[i],lsList27[j],lsList27[k]] lsList27_3.append(tmpList) #get all C(6,3) and C(27,3) for i in lsList6_3: for j in lsList27_3: tmpList = i[0:] tmpList.append(j[0]) tmpList.append(j[1]) tmpList.append(j[2]) tmpList.sort() tmpList.append(lsList[6]) retList.append(tmpList) retList.sort() return retListdef Level5(lsList): print('\nL5',lsList) retList = [] print('....**-*') retList5_1 = Level5_1(lsList) print('...***-.') retList5_2 = Level5_2(lsList) for i in retList5_1: retList.append(i) for i in retList5_2: retList.append(i) retList.sort() return retListdef Level6_1(lsList): retList = [] #get all C(6,2) lsListLeft = lsList[0:6] lsList6_2 = [] for i in range(0,5): for j in range(i+1,6): tmpList = [lsListLeft[i],lsListLeft[j]] lsList6_2.append(tmpList) #get all C(27,4) lsList27 = [] for i in range(1,34): if(i not in lsListLeft): lsList27.append(i) lsList27_4 = [] for i in range(0,24): for j in range(i+1,25): for k in range(j+1,26): for l in range(k+1,27): tmpList = [lsList27[i],lsList27[j],lsList27[k],lsList27[l]] lsList27_4.append(tmpList) #merge C(6,2) and C(27,4) for i in lsList6_2: for j in lsList27_4: tmpList = i[0:] tmpList.append(j[0]) tmpList.append(j[1]) tmpList.append(j[2]) tmpList.append(j[3]) tmpList.sort() tmpList.append(lsList[6]) retList.append(tmpList) retList.sort() return retListdef Level6_2(lsList): retList = [] #get all C(6,1) lsListLeft = lsList[0:6] lsList6_1 = [] for i in range(0,6): tmpList = [lsListLeft[i]] lsList6_1.append(tmpList) #get all C(27,5) lsList27 = [] for i in range(1,34): if(i not in lsListLeft): lsList27.append(i) lsList27_5 = [] for i in range(0,23): for j in range(i+1,24): for k in range(j+1,25): for l in range(k+1,26): for m in range(l+1,27): tmpList = [lsList27[i],lsList27[j],lsList27[k],lsList27[l],lsList27[m]] lsList27_5.append(tmpList) #merge C(6,1) and C(27,5) for i in lsList6_1: for j in lsList27_5: tmpList = i[0:] tmpList.append(j[0]) tmpList.append(j[1]) tmpList.append(j[2]) tmpList.append(j[3]) tmpList.append(j[4]) tmpList.sort() tmpList.append(lsList[6]) retList.append(tmpList) retList.sort() return retListdef Level6_3(lsList): retList = [] lsListLeft = lsList[0:6] #get all C(27,6) lsList27 = [] for i in range(1,34): if(i not in lsListLeft): lsList27.append(i) lsList27_6 = [] for i in range(0,22): for j in range(i+1,23): for k in range(j+1,24): for l in range(k+1,25): for m in range(l+1,26): for n in range(m+1,27): tmpList = [lsList27[i],lsList27[j],lsList27[k],lsList27[l],lsList27[m],lsList27[n]] lsList27_6.append(tmpList) #merge C(27,6) for j in lsList27_6: tmpList = [] tmpList.append(j[0]) tmpList.append(j[1]) tmpList.append(j[2]) tmpList.append(j[3]) tmpList.append(j[4]) tmpList.append(j[5]) tmpList.sort() tmpList.append(lsList[6]) retList.append(tmpList) retList.sort() return retListdef Level6(lsList): print('\nL6',lsList) retList = [] print('..****-.') retList6_1 = Level6_1(lsList) print('.*****-.') retList6_2 = Level6_2(lsList) print('******-.') retList6_3 = Level6_3(lsList) for i in retList6_1: retList.append(i) for i in retList6_2: retList.append(i) for i in retList6_3: retList.append(i) retList.sort() return retListif __name__=='__main__': lsList = [1,2,3,4,5,10,6]#################################### retList1 = Level1(lsList) print('L1 count:',len(retList1)) retList1.append(['count',len(retList1)]) SaveToCSV(retList1,'Level1.csv','w') #################################### retList2 = Level2(lsList) print('L2 count:',len(retList2)) retList2.append(['count',len(retList2)]) SaveToCSV(retList2,'Level2.csv','w') #################################### retList3 = Level3(lsList) print('L3 count:',len(retList3)) retList3.append(['count',len(retList3)]) SaveToCSV(retList3,'Level3.csv','w')#################################### retList4 = Level4(lsList) print('L4 count:',len(retList4)) retList4.append(['count',len(retList4)]) SaveToCSV(retList4,'Level4.csv','w')#################################### retList5 = Level5(lsList) print('L5 count:',len(retList5)) retList5.append(['count',len(retList5)]) SaveToCSV(retList5,'Level5.csv','w')#################################### retList6 = Level6(lsList) print('L6 count:',len(retList6)) retList6.append(['count',len(retList6)]) SaveToCSV(retList6,'Level6.csv','w')
本代码当前测试环境为python3.5
转载地址:http://cflgi.baihongyu.com/