900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > python双色球模拟投注及开奖 可复式投注

python双色球模拟投注及开奖 可复式投注

时间:2022-12-28 03:49:37

相关推荐

python双色球模拟投注及开奖 可复式投注

最近刚学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 # 一等奖奖金 一般都是浮动的,这里默认500Wprize2 = 200000 # 二等奖奖金 一般都是浮动的,这里默认20Wshow_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 # 一等奖奖金 一般都是浮动的,这里默认500Wprize2 = 200000 # 二等奖奖金 一般都是浮动的,这里默认20Wshow_num = 0 # 是否显示机选号码及中奖号码: 1显示,0不显示 购买组数较多时,不建议显示# 组合计算 n中选取m个def comb(n, m):if n == 0 or n < m:return 0else: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_blueif blue_win == 1:n_blue = num_of_blue - 1p61 = comb(red_win, 6) * comb(blue_win, 1) * prize1p60 = comb(red_win, 6) * n_blue * prize2p51 = comb(red_win, 5) * comb(num_of_red - red_win, 1) * comb(blue_win, 1) * 3000p50 = comb(red_win, 5) * comb(num_of_red - red_win, 1) * n_blue * 200p41 = comb(red_win, 4) * comb(num_of_red - red_win, 2) * comb(blue_win, 1) * 200p40 = comb(red_win, 4) * comb(num_of_red - red_win, 2) * n_blue * 10p31 = comb(red_win, 3) * comb(num_of_red - red_win, 3) * comb(blue_win, 1) * 10p21 = comb(red_win, 2) * comb(num_of_red - red_win, 4) * comb(blue_win, 1) * 5p11 = comb(red_win, 1) * comb(num_of_red - red_win, 5) * comb(blue_win, 1) * 5p01 = comb(num_of_red - red_win, 6) * comb(blue_win, 1) * 5return p61 + p60 + p51 + p50 + p41 + p40 + p31 + p21 + p11 + p01# 获取中奖的是第几年第几期def get_year(id_prize):prize_year = "您在购买后的第" + str(int(id_prize / 155)) + "年" + "第" + str(id_prize % 155) + "期"return prize_yearnumber_list_red = [] # 用于存放机选的红球number_list_blue = [] # 用于存放机选的蓝球record_of_price = [] # 用于存放中奖记录num_prize1 = 0 # 用于每种中奖情况统计num_prize2 = 0num_prize3 = 0num_prize4_50 = 0num_prize4_41 = 0num_prize5_40 = 0num_prize5_31 = 0num_prize6_21 = 0num_prize6_11 = 0num_prize6_01 = 0num_prizeNo = 0# 判断数据合法性if num_of_red < 6 or num_of_red > 20 or num_of_blue < 1 or num_of_blue > 17 or num_of_buyTotal < 1 or num_of_buy < 1:print("请满足以下条件\n 1. 总共购买期数≥1 \n 2. 每期购买几组机选≥1\n 3. 6≤红球个数≤20\n 4. 1≤蓝球个数≤16")else:# 显示投注方式及投注期数if num_of_red > 6 or num_of_blue > 1:print("您选择的是复式投注:", num_of_red, "+", num_of_blue)else:print("您选择的是单式投注:6+1")print("您购买彩票的期数:", num_of_buyTotal, " 每期购买的组数:", num_of_buy, "购买完需要:", str('%.2f' % (num_of_buyTotal / 155)), "年")print("每组投注金额:", comb(num_of_red, 6) * num_of_blue * 2, " 总注数:", int(money_buy / 2), " 总投注金额:", money_buy)# 生成每期购买号码及中奖号码for k in range(0, num_of_buyTotal):# 生成购买的机选号码for i in range(0, num_of_buy):number_list_red.append(get_random(num_of_red, 1)) # 机选红号码number_list_blue.append(get_random(num_of_blue, 2)) # 机选蓝号码# 生成中奖号码red_ball_list = get_random(6, 1)blue_ball_list = get_random(1, 2)# 显示每组机选号码及每期中奖号码if show_num == 1:print("\n第", k + 1, "期开奖号码为:", str(red_ball_list) + "-" + str(blue_ball_list))for i in range(0, num_of_buy):print("您所购买的彩票", "第", k + 1, "-", i + 1, "组", str(number_list_red[k * num_of_buy + i]) + "-" +\str(number_list_blue[k * num_of_buy + i]))# 开奖及中奖次数统计for j in range(0, num_of_buy):n1 = len(set(red_ball_list) & set(number_list_red[k * num_of_buy + j])) # 比较机选红球和中奖号码的红球,n1为红球中奖个数n2 = len(set(blue_ball_list) & set(number_list_blue[k * num_of_buy + j])) # 比较机选蓝球和中奖号码的蓝球,n2为蓝球中奖个数if n1 == 6 and n2 == 1: # 比对中奖结果,并统计中奖次数num_prize1 += 1 # 若中一二三等奖,则记录中奖时间record_of_price.append(get_year(k) + "中一等奖," + "中奖金额为:" + str(get_prize(6, 1)))if n1 == 6 and n2 == 0:num_prize2 += 1record_of_price.append(get_year(k) + "中二等奖," + "中奖金额为:" + str(get_prize(6, 0)))if n1 == 5 and n2 == 1:num_prize3 += 1record_of_price.append(get_year(k) + "中三等奖," + "中奖金额为:" + str(get_prize(5, 1)))if n1 == 5 and n2 == 0:num_prize4_50 += 1if n1 == 4 and n2 == 1:num_prize4_41 += 1if n1 == 4 and n2 == 0:num_prize5_40 += 1if n1 == 3 and n2 == 1:num_prize5_31 += 1if n1 == 2 and n2 == 1:num_prize6_21 += 1if n1 == 1 and n2 == 1:num_prize6_11 += 1if n1 == 0 and n2 == 1:num_prize6_01 += 1if n1 < 4 and n2 == 0: # 未中奖num_prizeNo += 1# 计算总金额 每个奖项的中奖次数*中奖金额 一至六等奖计算money_get = num_prize1 * get_prize(6, 1) + \num_prize2 * get_prize(6, 0) + \num_prize3 * get_prize(5, 1) + \num_prize4_50 * get_prize(5, 0) + num_prize4_41 * get_prize(4, 1) + \num_prize5_40 * get_prize(4, 0) + num_prize5_31 * get_prize(3, 1) + \num_prize6_21 * get_prize(2, 1) + num_prize6_11 * get_prize(1, 1) + num_prize6_01 * get_prize(0, 1)# 输出中奖结果print("\n您的中奖情况如下:")print("一等奖中奖次数:", num_prize1)print("二等奖中奖次数:", num_prize2)print("三等奖中奖次数:", num_prize3)print("四等奖中奖次数:", num_prize4_50 + num_prize4_41)print("五等奖中奖次数:", num_prize5_40 + num_prize5_31)print("六等奖中奖次数:", num_prize6_21 + num_prize6_11 + num_prize6_01)print("未中奖次数:", num_prizeNo)print("\n投注总金额:", money_buy, " 中奖总金额:", money_get)print("本次投注实际收益:", money_get - money_buy)if len(record_of_price) == 0:print("\n一、二、三等奖中奖记录:无")else:print("\n一、二、三等奖中奖记录:")for i in record_of_price:print(i)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。