最近刚学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 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 = 0
num_prize3 = 0
num_prize4_50 = 0
num_prize4_41 = 0
num_prize5_40 = 0
num_prize5_31 = 0
num_prize6_21 = 0
num_prize6_11 = 0
num_prize6_01 = 0
num_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)

python双色球模拟投注及开奖,可复式投注相关推荐

  1. 七乐彩中奖规则表_【开奖】双色球第2020094期开奖结果出炉!你中奖了吗?

    东莞福彩--让您人生多福,生活多彩!购福彩,做公益,圆梦想. ●活动进行时● 点击了解↓↓↓ ●[活动1]727福彩嘉年华:福彩携1000万体验券喊你来生日趴! ●[活动2]刮刮乐新票"超给 ...

  2. 七乐彩中奖规则表_双色球第2020118期开奖结果出炉!你中奖了吗?

    肇庆街拍--了解家乡事,关心身边人,总有一个理由让你爱上肇庆! 双色球2020118期开奖结果出炉了!双色球12亿派奖火热进行中!本期一等奖特别奖派奖金额为3000万元,一等奖普惠奖派奖金额为500万 ...

  3. Python,双色球模拟改进版

    这次主要改进的是,增加了记录功能,使软件能够自动根据以往开奖的记录推测这次最大可能的号码. # -*- coding: UTF-8 -*- import random print("欢迎使用 ...

  4. 【再次提醒】送的40本豆瓣高评分Python书籍,后天就要开奖

    书读得越多而不加思索,你就会觉得你知道得很多:而当你读书而思考得越多的时候,你就会越清楚地看到,你知道得还很少. 今天给大家推荐新出来的四本书籍,4本都是Python相关方面的. 为了感谢大家的支持, ...

  5. 双色球大乐透开奖查询软件

    最近老买lottery,复式兑起来太麻烦了,上网一查还真没有类似软件,于是自己写了一个,这下方便了哈哈,给广大彩民分享一下 第一次居然输了点专业词汇被封了,崩溃啊,功能见截图吧,不能多说了 由于附件最 ...

  6. python爬取分析超级大乐透开奖数据

    from bs4 import BeautifulSoup #引用BeautifulSoup库 import requests #引用requests import os #os import pan ...

  7. 【Python】爬虫初体验,40行代码爬取双色球2003年至今的开奖号码

    爬虫爬取的双色球开奖号码 按我目前的理解,爬虫的工作原理大致是: 获取目标网页,在网页(html文件)中筛选目标数据,最后把数据导出 利用爬虫爬取数据看似很"高深莫测",只需几分钟 ...

  8. 随机生成双色球号码判断中奖模拟开奖python代码

    # @Author: Gerry Zhao # @Date: 2019-01-23 18:56:47 # Last Modified by: Gerry Zhao # Last Modified ti ...

  9. 用C语言模拟双色球开奖

    用c语言模拟双色球开奖 问题描述: /* 双色球是中国福利彩票目前最火的一种玩法.而彩票是以抽签给奖方式进行筹款或敛财所发行的凭证,并非是赌博,每天都有上亿的彩民关注着双色球的开奖结果.其彩票投注区分 ...

最新文章

  1. linux 脚本 ,shell中的与
  2. python的jupyter的使用教程-强大的jupyter,python开发者的福音
  3. Arduino--AS608指纹传感器
  4. GDCM:DICOM文件转换为QImage文件的测试程序
  5. simantaneous AJAX call triggered for Kyma plugin
  6. 玩转GIT系列之【如何配置GIT的用户名/密码/密钥】
  7. 前端学习(1152):let经典面试题2
  8. Tomcat关闭失败,SEVERE: Could not contact localhost:8005. Tomcat may not be running.
  9. 云开发听说过没? Compilr 屌爆的在线开发工具 -_-#
  10. IP 层收发报文简要剖析4--ip 报文发送
  11. 推荐系统第一课 听课记录,边听边打字模式
  12. 【重识 HTML + CSS】定位
  13. Vue 混合、自定义指令、插件
  14. python教程我要自学网-我要自学网--json 数据解析-python。
  15. 关于注册keil的事儿,为啥注册成功之后keil还是提示会限制2K内存
  16. 基于排队论模型的收银台服务系统的分析及可视化设计
  17. 将war文件解压到指定目录
  18. 谷歌SEO优化排名做法详解,看这篇就都懂了
  19. Bootloader的启动
  20. dfs-placing apples

热门文章

  1. Android Studio下载路径
  2. 改变世界的物理学--(1)世界为什么变化这么快
  3. 《BitUp》:像素风格游戏及地图编辑器的开发历程
  4. 信息系统项目文案学习,常见高级词汇整理记录
  5. 高等数学期末总复习 DAY 5. 罗尔定理证明题 拉格朗日、柯西中值定理 泰勒公式及麦克劳林公式
  6. MATLAB绘制加噪和去噪图像
  7. 炸弹人小游戏代码开源(python)
  8. 神经网络pid控制器MATLAB,基于BP神经网络的PID控制器及其MATLAB仿真.pdf
  9. 不花一分钱,搭建一个完全免费的python3+flask+mysql服务器
  10. Java.IO的概述