前言
生活在寸土寸金的帝都,买房变成了一件可遇而不可求的事情,作为一个朝九晚九挣工资的人来说,买房或许只是出现在梦里,但是梦想总是要有的,万一实现了呢?其实真正赚钱的方式都明明白白地写在了刑法里,可是咱可是本分人,不能做哪些违法的事情,想要赚钱买房,还有一种比较随意的方式——买彩票,如今这帝都的房价,不是你中一张500万彩票就能买得起的,如果要买的起,那就需要中两张!
经历
中两张500万的彩票,想想就知道这种概率有多大了,跟你被天上掉下的陨石砸中脑袋差不多,是不是感觉没有希望了,不过不要灰心嘛,万一你要被砸中了呢?
对于预测彩票号码这件事情,很抱歉,我不是神仙,没有方法可以办到,不过有件事你需要知道一下:那就是双色球自从问世以来,十几年间从未出现过一次号码完全相同的情况,也就是说你买个和历史号码一样的,基本中不了大奖了,但是也不一定,万一就有两颗陨石同时砸中你呢!
对于买彩票这件事,有的人喜欢买一个号,坚持多年从不动摇,一心做着发财梦;而有的人却是很随意,每天机选,靠天吃饭;还有一部分大神就比较高端了,每天窝在彩票投注站里,写写画画,仿佛可以窥探天机一样,每期少则几十,多则几百的砸着自己的血汗钱,我劝你们还是醒醒吧。
而我呢,就属于半个第一种人,坚持着一个号,做着发财梦,偶然间看到彩票投注站就买一张,遇不到就算了,典型的佛系彩票购买者,这样买了一段时间,忽然有个想法,我买的这个号到底在历史上中没中过大奖呢?于是作为程序猿的我决定写个程序查一下不就好了,所以才有了下面这段代码。
代码
引入库函数,其实需要的函数特别简单,就是要处理csv格式的双色球历史开奖数据。
1
import csv
定义奖项,也就是中奖号码情况与奖项的对应关系,注意中一个篮球是6等奖哟!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# list award classify
award_classify = {
(6,1): 1,
(6,0): 2,
(5,1): 3,
(5,0): 4,
(4,1): 4,
(4,0): 5,
(3,1): 5,
(3,0): 0,
(2,1): 6,
(2,0): 0,
(1,1): 6,
(1,0): 0,
(0,1): 6,
(0,0): 0
}定义比对函数,这个函数要能判断出我的号码跟一个历史号码相比,中了几个红球和蓝球。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18# count red balls and blue balls
def count_red_blue_balls(my_number, history_number):
red_count, blue_count = 0, 0
my_index, history_index = 0, 0
while my_index < 6 and history_index < 6:
if my_number[my_index] == history_number[history_index]:
my_index += 1
history_index += 1
red_count += 1
elif my_number[my_index] < history_number[history_index]:
my_index += 1
else:
history_index += 1
if my_number[6] == history_number[6]:
blue_count = 1
return red_count, blue_count查询历史中奖情况,使用我选择的号码和历史开奖情况逐一比对,得到每个奖项中奖次数。
1
2
3
4
5
6
7
8
9# count award situation of my number
def count_award_situation(my_number):
local_award_statistics = [0,0,0,0,0,0,0]
with open('lottery_history_data.csv', 'r') as file:
data_content = csv.reader(file)
for row_data in data_content:
local_award_statistics[award_classify[count_red_blue_balls(my_number,
list(map(int, row_data[1:8])))]] += 1
return local_award_statistics展示查询结果,将统计结果以友好的方式呈现。
1
2
3
4
5
6
7# show award statictics for a number
def show_award_result(my_number, award_statistics):
print("my number is %s\n" % my_number)
print("history award record list:")
for index in range(0,7):
print("award %d: %4d times" % (index, award_statistics[index]))启动函数,读取自己定义的号码,然后进行统计
1
2
3
4
5
6
7
8
9# main function
if __name__ == '__main__':
#my_number = [5,6,10,11,25,30,11]
#my_number = [5,8,10,15,26,30,6]
print("请输入6个红球和1个蓝球号码,空格分隔:")
my_number = list(map(int, input().split()))
award_statistics = count_award_situation(my_number)
show_award_result(my_number, award_statistics)
运行结果
总结
- 这段代码只是一时好奇的产物,所以说好奇心带来了生产力。
- 统计代码只是做简单使用,所以一些特殊情况并未判断,比如输入字母或者未排序的数字。
- 看到我的号码连个4等奖都没有中过,不知道是该高兴还是难过,是不是这个大奖在等着我啊!
- 说到这也该结束了,不好意思上周六(20180113)买的双色球又中了6等奖,明天(20180121)要去领奖喽!
源码
代码传送门(附双色球历史数据):一触即达