最近刚学python,加上前阵子双色球小中4等奖,所以就尝试写了个双色球模拟中奖,可模拟复式投注及奖金计算。唯一的难点就是复式投注中奖时奖金的计算公式,想了很久才搞清楚。
双色球每年开155期,假设一个人每期买10注机选6+1,连续买70年,这个是模拟结果,运气不错竟然中了二等奖,在第34年中的~~
俗话说有些人十辈子都中不了一等奖,这是模拟买700年的,每期买5注复式7+3的结果,也还是只中了1注二等奖,在第327年中的。。。
源码如下:
在开头可修改购买参数,大家可以模拟下,看买多久可以中1等奖。单式是6红+1蓝,复式投注就改红球和蓝球的个数就行
# 数据初始化
num_of_buyTotal = 155*10 # 总共购买几期 每年开大约155期
num_of_buy = 10 # 每期购买几组机选
num_of_red = 7 # 红球投注个数(范围6-20)
num_of_blue = 3 # 蓝球投注个数(范围1-16)
prize1 = 5000000 # 一等奖奖金 一般都是浮动的,这里默认500W
prize2 = 200000 # 二等奖奖金 一般都是浮动的,这里默认20W
show_num = 0 # 是否显示机选号码及中奖号码: 1显示,0不显示 购买组数较多时,不建议显示
import math # 导入math库,计算彩票组合时用到
import random # 导入random库,生成随机数的时候要用到
# 数据初始化
num_of_buyTotal = 155*10 # 总共购买几期 每年开大约155期
num_of_buy = 10 # 每期购买几组机选
num_of_red = 7 # 红球投注个数(范围6-20)
num_of_blue = 3 # 蓝球投注个数(范围1-16)
prize1 = 5000000 # 一等奖奖金 一般都是浮动的,这里默认500W
prize2 = 200000 # 二等奖奖金 一般都是浮动的,这里默认20W
show_num = 0 # 是否显示机选号码及中奖号码: 1显示,0不显示 购买组数较多时,不建议显示
# 组合计算 n中选取m个
def comb(n, m):
if n == 0 or n < m:
return 0
else:
return math.factorial(n) // (math.factorial(n - m) * math.factorial(m))
# 计算总投注金额(期数*每期购买组数*每组注数*2)
money_buy = num_of_buyTotal * num_of_buy * comb(num_of_red, 6) * num_of_blue * 2
# 获取机选号码 1.选几个号码;2.颜色:1红2蓝
def get_random(num_of_selected, color):
num_selected = []
if color == 1: # 红球蓝球选取范围不同
pick_scope = list(range(1, 34))
else:
pick_scope = list(range(1, 17))
for i in range(0, num_of_selected):
random.shuffle(pick_scope)
ball_picked = pick_scope.pop()
num_selected.append(ball_picked)
num_selected.sort()
return num_selected
# 获取对应红球中奖个数及蓝球中奖个数对应的总奖金(红球中奖个数,蓝球中奖个数)
def get_prize(red_win, blue_win):
n_blue = num_of_blue
if blue_win == 1:
n_blue = num_of_blue