双色球笔记3--输出所有中奖号码

双色球笔记3--输出所有中奖号码

 

1、功能

本文主要根据中奖类别输出所有中奖号码,双色球奖项分为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%。

 

2、代码

根据双色球种类,笔者将其进行如下归类。左边红球表示1到6-右边蓝球表示7,*表示不同的个数,.表示相同的个数,以下计算都约定红球升序。

1)综合预览

该部分计算各项中奖数量、中奖率等问题:

# -*- coding:utf-8 -*-
def fn(x):
	ret = 1
	for i in range(1,x+1):
		ret = ret*i
	return ret

def cn(x,y):
	ret = fn(x)/(fn(y)*fn(x-y))
	return ret

if __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=1

Level2:包括 ......-*
L2只包括1类,sum=15=1*15

Level3:包括 .....*-.
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 csv

def 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 retList

def 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 retList

def 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 retList

def 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 retList
def 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 retList
def 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 retList

def 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 retList
def 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 retList
def 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 retList

def 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 retList
def 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 retList
def 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 retList
def 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 retList

if __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')

 

3、说明

本代码当前测试环境为python3.5

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

昕光xg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值