大乐透开奖

创建日期:2024-06-21
更新日期:2025-02-01

历史中奖数据

网页:https://www.lottery.gov.cn/kj/kjlb.html?dlt

json格式数据:https://webapi.sporttery.cn/gateway/lottery/getHistoryPageListV1.qry?gameNo=85&provinceId=0&pageSize=9999999&isVerify=1&pageNo=1

计算中奖程序

'''
# 名称:大乐透中奖计算
# 作者:liteng
# 红球:1-35,选择5个
# 蓝球:1-12,选择2个
'''
import json

# 获取开奖信息
def getList():
    file = open('./sample01/data/lottery/grand-lotto.json', encoding='utf-8')
    data = file.read()
    result = json.loads(data)['value']['list']
    file.close()
    list = []
    for item in result:
        parts = item['lotteryDrawResult'].split(' ')
        balls = []
        for ball in parts:
            balls.append(int(ball, 10))

        list.append({
            'time': item['lotteryDrawTime'],
            'balls': balls
        })
    return list

# 计算当前号码几等奖
def getPrize(current, expect):
    redEqual = 0
    blueEqual = 0
    for i in range(7):
        for j in range(7):
            if current[i] != expect[j]:
                continue
            if i < 5 and j < 5:
                redEqual += 1
            if i >= 5 and j >= 5:
                blueEqual += 1
    totalEqual = redEqual + blueEqual
    if totalEqual == 7:
        return 1
    elif redEqual == 5 and blueEqual == 1:
        return 2
    elif redEqual == 5:
        return 3
    elif redEqual == 4 and blueEqual == 2:
        return 4
    elif redEqual == 4 and blueEqual == 1:
        return 5
    elif redEqual == 3 and blueEqual == 2:
        return 6
    elif redEqual == 4:
        return 7
    elif redEqual == 3 and blueEqual == 1 or redEqual == 2 and blueEqual == 2:
        return 8
    elif redEqual == 3 or redEqual == 1 and blueEqual == 2 or redEqual == 2 and blueEqual == 1:
        return 9
    return 10

def getMoney(prize):
    if prize == 1:
        return 10000000
    elif prize == 2:
        return 5000000
    elif prize == 3:
        return 10000
    elif prize == 4:
        return 3000
    elif prize == 5:
        return 300
    elif prize == 6:
        return 200
    elif prize == 7:
        return 100
    elif prize == 8:
        return 15
    elif prize == 9:
        return 5
    return 0

def main():
    list = getList()
    balls = [
        # 2023-01-02
        [6, 15, 17, 27, 31, 1, 9],
        [5, 12, 27, 30, 34, 4, 8],
        [9, 12, 14, 25, 30, 10, 11],
        [8, 10, 14, 30, 32, 11, 12],
        [2, 8, 11, 29, 32, 3, 5],
        # 2023-7-19
        [7, 16, 26, 30, 34, 5, 8],
        [2, 4, 5, 31, 35, 11, 12],
        [6, 10, 24, 33, 35, 2, 11],
        [8, 10, 21, 26, 29, 1, 9],
        [3, 5, 15, 24, 34, 9, 11]
    ]
    for i in range(len(balls)):
        ball = balls[i]
        prize = 10
        time = None
        expect = None
        for item in list:
            prize1 = getPrize(ball, item['balls'])
            if prize1 < prize:
                prize = prize1
                time = item['time']
                expect = item['balls']
        if time != None:
            current = ' '.join([str(item) for item in ball])
            expect = ' '.join([str(item) for item in expect])
            money = getMoney(prize)
            print(
                f'恭喜你,第{i+1}注彩票在{time}中了{prize}等奖,获得{money}元\t开奖:[{expect}] 实际:[{current}]')
        else:
            print(f'很遗憾,第{i+1}注彩票未中奖')

main()

输出结果

恭喜你,第1注彩票在2019-10-21中了6等奖,获得200元       开奖:[6 15 17 22 25 1 9] 实际:[6 15 17 27 31 1 9]
恭喜你,第2注彩票在2020-10-05中了7等奖,获得100元       开奖:[5 25 27 30 34 6 12] 实际:[5 12 27 30 34 4 8]
恭喜你,第3注彩票在2015-08-26中了5等奖,获得300元       开奖:[9 12 14 22 25 5 10] 实际:[9 12 14 25 30 10 11]
恭喜你,第4注彩票在2012-02-08中了5等奖,获得300元       开奖:[10 14 24 30 32 1 12] 实际:[8 10 14 30 32 11 12]
恭喜你,第5注彩票在2017-12-02中了6等奖,获得200元       开奖:[2 8 21 22 29 3 5] 实际:[2 8 11 29 32 3 5]
恭喜你,第6注彩票在2012-03-21中了7等奖,获得100元       开奖:[7 8 16 26 34 7 11] 实际:[7 16 26 30 34 5 8]
恭喜你,第7注彩票在2018-11-14中了5等奖,获得300元       开奖:[4 5 19 31 35 2 12] 实际:[2 4 5 31 35 11 12]
恭喜你,第8注彩票在2020-01-11中了7等奖,获得100元       开奖:[6 10 33 34 35 1 3] 实际:[6 10 24 33 35 2 11]
恭喜你,第9注彩票在2021-08-21中了8等奖,获得15元        开奖:[7 8 10 20 21 1 5] 实际:[8 10 21 26 29 1 9]
恭喜你,第10注彩票在2016-04-02中了7等奖,获得100元      开奖:[3 5 13 24 34 3 5] 实际:[3 5 15 24 34 9 11]

模拟中奖程序

'''
# 名称:大乐透模拟中奖
# 作者:liteng
# 红球:1-35,选择5个
# 蓝球:1-12,选择2个
'''
import json
import random

# 获取开奖信息
def getList():
    file = open('./sample01/data/lottery/grand-lotto.json', encoding='utf-8')
    data = file.read()
    result = json.loads(data)['value']['list']
    file.close()
    list = []
    for item in result:
        parts = item['lotteryDrawResult'].split(' ')
        balls = []
        for ball in parts:
            balls.append(int(ball, 10))

        list.append({
            'time': item['lotteryDrawTime'],
            'balls': balls
        })
    return list

# 计算当前号码几等奖
def getPrize(current, expect):
    redEqual = 0
    blueEqual = 0
    for i in range(7):
        for j in range(7):
            if current[i] != expect[j]:
                continue
            if i < 5 and j < 5:
                redEqual += 1
            if i >= 5 and j >= 5:
                blueEqual += 1
    totalEqual = redEqual + blueEqual
    if totalEqual == 7:
        return 1
    elif redEqual == 5 and blueEqual == 1:
        return 2
    elif redEqual == 5:
        return 3
    elif redEqual == 4 and blueEqual == 2:
        return 4
    elif redEqual == 4 and blueEqual == 1:
        return 5
    elif redEqual == 3 and blueEqual == 2:
        return 6
    elif redEqual == 4:
        return 7
    elif redEqual == 3 and blueEqual == 1 or redEqual == 2 and blueEqual == 2:
        return 8
    elif redEqual == 3 or redEqual == 1 and blueEqual == 2 or redEqual == 2 and blueEqual == 1:
        return 9
    return 10

def getMoney(prize):
    if prize == 1:
        return 10000000
    elif prize == 2:
        return 5000000
    elif prize == 3:
        return 10000
    elif prize == 4:
        return 3000
    elif prize == 5:
        return 300
    elif prize == 6:
        return 200
    elif prize == 7:
        return 100
    elif prize == 8:
        return 15
    elif prize == 9:
        return 5
    return 0

def main():
    list = getList()
    balls = [
        # # 2023-01-02
        # [6, 15, 17, 27, 31, 1, 9],
        # [5, 12, 27, 30, 34, 4, 8],
        # [9, 12, 14, 25, 30, 10, 11],
        # [8, 10, 14, 30, 32, 11, 12],
        # [2, 8, 11, 29, 32, 3, 5],
        # # 2023-7-19
        # [7, 16, 26, 30, 34, 5, 8],
        # [2, 4, 5, 31, 35, 11, 12],
        # [6, 10, 24, 33, 35, 2, 11],
        # [8, 10, 21, 26, 29, 1, 9],
        # [3, 5, 15, 24, 34, 9, 11]
    ]
    for i in range(10):
        red = []
        blue = []
        while True:
            num = random.randint(1, 35)
            if red.count(num) == 0:
                red.append(num)
            if len(red) == 5:
                break
        while True:
            num = random.randint(1, 12)
            if blue.count(num) == 0:
                blue.append(num)
            if len(blue) == 2:
                break
        red.sort()
        blue.sort()
        ball = []
        for i in red:
            ball.append(i)
        for i in blue:
            ball.append(i)
        balls.append(ball)
    for i in range(len(balls)):
        ball = balls[i]
        prize = 10
        time = None
        expect = None
        for item in list:
            prize1 = getPrize(ball, item['balls'])
            if prize1 < prize:
                prize = prize1
                time = item['time']
                expect = item['balls']
        if time != None:
            current = ' '.join([str(item) for item in ball])
            expect = ' '.join([str(item) for item in expect])
            money = getMoney(prize)
            print(
                f'恭喜你,第{i+1}注彩票在{time}中了{prize}等奖,获得{money}元\t开奖:[{expect}] 实际:[{current}]')
        else:
            print(f'很遗憾,第{i+1}注彩票未中奖')

main()

输出结果

恭喜你,第1注彩票在2022-05-04中了8等奖,获得15元        开奖:[6 10 20 28 35 1 10] 实际:[6 14 26 28 34 1 10]
恭喜你,第2注彩票在2021-10-25中了8等奖,获得15元        开奖:[14 15 26 27 29 4 5] 实际:[12 20 27 28 29 4 5]
恭喜你,第3注彩票在2012-06-16中了7等奖,获得100元       开奖:[2 4 22 25 34 2 11] 实际:[4 11 22 25 34 3 4]
恭喜你,第4注彩票在2013-01-07中了6等奖,获得200元       开奖:[1 16 18 21 31 9 12] 实际:[1 2 16 19 21 9 12]
恭喜你,第5注彩票在2011-04-09中了5等奖,获得300元       开奖:[3 7 15 18 20 1 6] 实际:[3 7 15 18 33 1 8]
恭喜你,第6注彩票在2013-06-17中了6等奖,获得200元       开奖:[6 12 13 16 30 7 12] 实际:[6 9 13 16 17 7 12]
恭喜你,第7注彩票在2013-07-17中了5等奖,获得300元       开奖:[3 9 25 26 33 3 12] 实际:[3 4 9 26 33 2 3]
恭喜你,第8注彩票在2023-06-26中了8等奖,获得15元        开奖:[5 6 9 11 14 2 4] 实际:[2 6 9 11 24 2 6]
恭喜你,第9注彩票在2016-12-03中了5等奖,获得300元       开奖:[1 6 17 23 26 6 12] 实际:[1 6 17 23 30 7 12]
恭喜你,第10注彩票在2013-10-21中了7等奖,获得100元      开奖:[2 9 10 33 34 5 12] 实际:[2 9 10 27 34 3 7]