Python 实现彩票抽奖系统详解(双色球)

目录

一、系统功能概述

二、代码实现详解

(一)自选功能实现(ziXuanCaiPiao函数)

(二)机选功能实现(autoChoiceCaiPiao函数)

(三)彩票展示功能实现(showCaiPiao函数)

(四)中奖结果判定功能实现(getWinResult函数)

(五)中奖结果信息展示功能实现(showWinResultMsg函数)

(六)主程序逻辑(while循环部分)

三、系统运行效果展示

四、完整代码展示

五、总结


        在当今数字化的时代,编程已经成为了一项极具价值的技能,它能够帮助我们解决各种实际问题,实现丰富多样的功能。本文将详细介绍一个使用 Python 语言实现的彩票抽奖系统。通过这个系统,我们可以深入了解 Python 的基本语法、函数定义、流程控制以及如何与用户进行交互等方面的知识。这个彩票抽奖系统模拟了现实中彩票购买、抽奖和中奖结果判定的过程,具有一定的趣味性和实用性,对于初学者来说是一个很好的实践项目,同时也能为有一定编程基础的开发者提供一些参考和启发。

一、系统功能概述

  1. 打印欢迎界面:当用户运行程序时,首先会看到一个友好的欢迎界面,向用户展示彩票中心的相关信息,营造出一种真实的彩票购买场景。
  2. 用户选择功能:用户可以在自选和机选两种方式中进行选择,以确定彩票号码的生成方式。如果用户输入的选择不正确,程序会通过死循环一直提示用户重新选择,直到用户输入正确的选项。
  3. 号码生成功能
  4. 机选方法:机器通过随机算法生成一组符合彩票规则的号码,包括 6 个 1~33 之间的不重复红球和 1 个 1~16 之间的蓝球。
  5. 自选方法:用户根据提示手动输入 6 个 1~33 之间的不重复数字作为红球号码,以及 1 个 1~16 之间的数字作为蓝球号码。如果用户输入的数字不符合要求,程序会给出相应的提示。
  6. 号码比对功能:将用户选择的彩票号码与机器生成的中奖号码进行比对,以确定用户是否中奖以及中奖的奖项等级。
  7. 奖项判定功能:根据号码比对的结果,按照预先设定的规则判定用户中了哪个奖项,奖项分为一等奖至六等奖以及未中奖。
  8. 打印抽奖情况:最后,程序会将用户选择的彩票号码、中奖号码以及用户的中奖结果详细地打印出来,让用户清楚地了解自己的抽奖情况。

二、代码实现详解

(一)自选功能实现(ziXuanCaiPiao函数)

  1. 代码逻辑
  2. 首先,函数通过input函数获取用户输入的 6 个 1~33 之间的数字,并用空格隔开。然后,将用户输入的字符串通过split方法分割成一个列表list01
  3. 接着,对list01进行筛选,只保留 1 到 33 之间的数字,将其转换为整数后存入list01。然后,将list01转换为集合set1,通过判断集合的长度是否为 6 来确定用户输入的数字个数是否正确且不重复。如果不符合要求,打印提示信息 “您输入的数字个数不对或者不规范”。
  4. 如果红球数字输入正确,函数继续提示用户输入一个 1~16 之间的数字作为蓝球号码。如果用户输入的是数字且在 1 到 16 的范围内,将蓝球号码添加到列表中,并对列表进行排序后返回。如果蓝球输入不符合要求,打印提示信息 “您输入的蓝球不符合要求”。
  5. 代码示例
def ziXuanCaiPiao():
    # 存放自选的彩票
    customList = []
    str1 = input("请输入6个1~33之间的不重复数字,并使用空格隔开")
    # 红球
    list01 = str1.split()
    list01 = [num for num in list01 if 1 <= int(num) <= 33]
    set1 = set(list01)
    if len(set1)!= 6:
        print("您输入的数字个数不对或者不规范")
    else:
        customList += list01
        customList.sort()
        str2 = input("请输入一个1~16之间的数字:")
        if str2.isdigit() and 1 <= int(str2) <= 16:
            customList.append(str2)
            return customList
        else:
            print("您输入的蓝球不符合要求")

(二)机选功能实现(autoChoiceCaiPiao函数)

  1. 代码逻辑
  2. 对于红球的生成,函数首先创建一个包含 1 到 33 的整数列表list01。然后,通过一个循环,每次随机从list01中选取一个索引,将该索引对应的数字取出作为红球号码,并从list01中删除该数字,以保证红球号码不重复。循环 6 次,得到 6 个红球号码,并将其存入autoList中,然后对autoList进行排序。
  3. 对于蓝球的生成,函数通过random.randint(1, 16)随机生成一个 1 到 16 之间的整数作为蓝球号码,并添加到autoList中。最后,将autoList中的数字转换为字符串列表后返回。
  4. 代码示例
def autoChoiceCaiPiao():
    # 红球6个,是一个1~33之间的整数
    # list : 排序比较方便
    autoList = []
    list01 = list(range(1, 34))
    for i in range(6):
        index = random.randint(0, len(list01) - 1)
        redBall = list01.pop(index)
        autoList.append(redBall)
    autoList.sort()
    # print(autoList)
    # 蓝球的生成
    blueBall = random.randint(1, 16)
    autoList.append(blueBall)
    # print(autoList)
    strList = [str(i) for i in autoList]
    return strList

(三)彩票展示功能实现(showCaiPiao函数)

  1. 代码逻辑
  2. 函数接收中奖号码列表zjList和用户购买的彩票号码列表buyList作为参数。
  3. 首先,分别从buyListzjList中提取红球号码和蓝球号码。红球号码是列表的前 6 个元素,蓝球号码是列表的第 7 个元素(索引为 6)。
  4. 然后,将红球号码列表转换为字符串,并用逗号连接,以便于显示。
  5. 最后,使用print函数分别打印出用户选择的彩票号码和中奖号码的格式为 “红球:[红球号码列表] 蓝球:[蓝球号码]” 的信息。
  6. 代码示例
def showCaiPiao(zjList, buyList):
    buyRedList = buyList[0:6]
    buyBlueList = buyList[6:]
    zjRedList = zjList[0:6]
    zjBlueList = zjList[6:]

    print("++++++++++++++++++++")

    # print(buyBlueList)
    # print(type(buyBlueList))
    print("您的选择是:红球:" + ",".join(buyRedList) + "蓝球:" + buyBlueList[0])
    print("中奖号码是:红球:" + ",".join(zjRedList) + " 蓝球:" + zjBlueList[0])

(四)中奖结果判定功能实现(getWinResult函数)

  1. 代码逻辑
  2. 函数接收中奖号码列表zjList和用户购买的彩票号码列表buyList作为参数。
  3. 首先,将buyListzjList中的红球号码分别提取出来并转换为集合buyRedSetzjRedSet,通过计算两个集合的交集jiaoJiSet的长度,得到用户选中的红球个数redNum
  4. 然后,分别获取用户购买的蓝球号码buyBlue和中奖的蓝球号码zjBlue
  5. 最后,根据预先设定的中奖规则,通过一系列的条件判断来确定用户的中奖等级。如果用户中了一等奖(6 个红球全中且蓝球也中),则返回 1;中二等奖(6 个红球全中但蓝球未中),返回 2;以此类推,根据不同的中奖情况返回相应的数字。如果用户未中奖,则返回 0。
  6. 代码示例
def getWinResult(zjList, buyList):
    # 使用交集的方式,查看中将的球数
    buyRedSet = set(buyList[0:6])
    buyBlue = buyList[6:][0]
    zjRedSet = set(zjList[0:6])
    zjBlue = zjList[6:][0]

    jiaoJiSet = buyRedSet & zjRedSet
    redNum = len(jiaoJiSet)
    if redNum == 6 and buyBlue == zjBlue:
        return 1
    elif redNum == 6:
        return 2
    elif redNum == 5 and buyBlue == zjBlue:
        return 3
    elif (redNum == 4 and buyBlue == zjBlue) or redNum == 5:
        return 4
    elif (redNum == 3 and buyBlue == zjBlue) or redNum == 4:
        return 5
    elif buyBlue == zjBlue:
        return 6
    else:
        return 0

(五)中奖结果信息展示功能实现(showWinResultMsg函数)

  1. 代码逻辑
  2. 函数使用 Python 的match-case结构来根据传入的中奖结果等级winResultLevel打印相应的中奖信息。
  3. winResultLevel为 0 时,打印 “没有中奖,再接再厉”;为 1 时,打印 “恭喜您中了一等奖,至少 500 万”;为 2 时,打印 “恭喜您中了二等奖,至少 300 万”;以此类推,对应不同的奖项等级打印相应的中奖提示信息。
  4. 代码示例
def showWinResultMsg(winResultLevel):
    match winResultLevel:
        case 0:
            print("没有中奖,再接再厉")
        case 1:
            print("恭喜您中了一等奖,至少500万")
        case 2:
            print("恭喜您中了二等奖,至少300万")
        case 3:
            print("恭喜您中了三等奖,3000元到账")
        case 4:
            print("恭喜您中了四等奖,200元到账")
        case 5:
            print("恭喜您中了五等奖,10元到账")
        case 6:
            print("恭喜您中了六等奖,5元到账")

(六)主程序逻辑(while循环部分)

  1. 代码逻辑
  2. 首先,程序通过一个无限循环来持续运行,直到用户选择退出。在循环内部,首先打印欢迎界面,提示用户输入选择:1 表示自选,2 表示机选,0 表示退出系统。
  3. 用户输入选择后,通过match-case结构来处理不同的选择。
  4. 当用户选择 1(自选)时,调用ziXuanCaiPiao函数获取用户自选的彩票号码zixuanList,然后调用showCaiPiao函数展示中奖号码和用户选择的号码,接着调用getWinResult函数获取中奖结果等级,并调用showWinResultMsg函数展示中奖信息。
  5. 当用户选择 2(机选)时,调用autoChoiceCaiPiao函数两次,一次生成中奖号码zhongJiangList,另一次生成用户的机选号码jixuanList。然后进行与自选相同的操作,展示号码、判定中奖结果并展示中奖信息。
  6. 当用户选择其他选项(默认情况,即输入不是 1、2 或 0 时),程序继续循环,提示用户重新输入选择。
  7. 当用户选择 0 时,循环结束,程序退出。
  8. 代码示例
while True:
    print("欢迎来到王者体育彩票中心")
    print("请输入您的选择:1、自选 2、机选 0 退出系统")
    choice = int(input())
    zhongJiangList = autoChoiceCaiPiao()
    match choice:
        case 1:
            zixuanList = ziXuanCaiPiao()
            showCaiPiao(zhongJiangList, zixuanList)
            winResultLevel = getWinResult(zhongJiangList, zixuanList)
            showWinResultMsg(winResultLevel)
        case 2:
            jixuanList = autoChoiceCaiPiao()
            showCaiPiao(zhongJiangList, jixuanList)
            winResultLevel = getWinResult(zhongJiangList, jixuanList)
            showWinResultMsg(winResultLevel)
        case _:
            break

三、系统运行效果展示

当用户运行程序时,首先会看到欢迎界面:

然后提示用户输入选择:

如果用户选择 1(自选),程序会提示用户输入 6 个 1~33 之间的不重复数字作为红球号码:

用户输入后,如果不符合要求,会提示相应的错误信息,例如输入数字个数不对或有重复数字时会提示 “您输入的数字个数不对或者不规范”。如果输入正确,会继续提示用户输入一个 1~16 之间的数字作为蓝球号码:

如果蓝球号码输入不符合要求,会提示 “您输入的蓝球不符合要求”。如果都输入正确,程序会展示用户选择的彩票号码和中奖号码,并给出中奖结果信息,例如:

如果用户选择 2(机选),程序会自动生成中奖号码和用户的机选号码,并展示相关信息和中奖结果,例如:

如果用户选择 0,程序会退出运行。

四、完整代码展示

import random


# 自选
def ziXuanCaiPiao():
    # 存放自选的彩票
    customList = []
    str1 = input("请输入6个1~33之间的不重复数字,并使用空格隔开")
    # 红球
    list01 = str1.split()
    list01 = [num for num in list01 if 1 <= int(num) <= 33]
    set1 = set(list01)
    if len(set1) != 6:
        print("您输入的数字个数不对或者不规范")
    else:
        customList += list01
        customList.sort()
        str2 = input("请输入一个1~16之间的数字:")
        if str2.isdigit() and 1 <= int(str2) <= 16:
            customList.append(str2)
            return customList
        else:
            print("您输入的蓝球不符合要求")


# 机选
def autoChoiceCaiPiao():
    # 红球 6 个,是一个1~33之间的整数
    # list : 排序比较方便
    autoList = []
    list01 = list(range(1, 34))
    for i in range(6):
        index = random.randint(0, len(list01)-1)
        redBall = list01.pop(index)
        autoList.append(redBall)
    autoList.sort()
    # print(autoList)
    # 蓝球的生成
    blueBall = random.randint(1,16)
    autoList.append(blueBall)
    # print(autoList)
    strList = [str(i) for i in autoList]
    return strList


def showCaiPiao(zjList, buyList):
    buyRedList = buyList[0:6]
    buyBlueList = buyList[6:]
    zjRedList = zjList[0:6]
    zjBlueList = zjList[6:]

    # print("++++++++++++++++++++")

    # print(buyBlueList)
    # print(type(buyBlueList))
    print("您的选择是:红球:" + ",".join(buyRedList) + "蓝球:"+buyBlueList[0])
    print("中奖号码是:红球:" + ",".join(zjRedList) + " 蓝球:"+zjBlueList[0])


def getWinResult(zjList, buyList):
    # 使用交集的方式,查看中将的球数
    buyRedSet = set(buyList[0:6])
    buyBlue = buyList[6:][0]
    zjRedSet = set(zjList[0:6])
    zjBlue = zjList[6:][0]

    jiaoJiSet = buyRedSet & zjRedSet
    redNum = len(jiaoJiSet)
    if redNum == 6 and buyBlue == zjBlue:
        return 1
    elif redNum == 6:
        return 2
    elif redNum == 5 and buyBlue == zjBlue:
        return 3
    elif (redNum == 4 and buyBlue == zjBlue) or redNum == 5:
        return 4
    elif (redNum == 3 and buyBlue == zjBlue) or redNum == 4:
        return 5
    elif buyBlue == zjBlue:
        return 6
    else:
        return 0


def showWinResultMsg(winResultLevel):
    match winResultLevel:
        case 0:
            print("没有中奖,再接再厉")
        case 1:
            print("恭喜您中了一等奖,至少500万")
        case 2:
            print("恭喜您中了二等奖,至少300万")
        case 3:
            print("恭喜您中了三等奖,3000元到账")
        case 4:
            print("恭喜您中了四等奖,200元到账")
        case 5:
            print("恭喜您中了五等奖,10元到账")
        case 6:
            print("恭喜您中了六等奖,5元到账")


while True:
    print("欢迎来到王者体育彩票中心")
    print("请输入您的选择:1、自选 2、机选 0 退出系统")
    choice = int(input())
    zhongJiangList = autoChoiceCaiPiao()
    match choice:
        case 1:
            zixuanList = ziXuanCaiPiao()
            showCaiPiao(zhongJiangList, zixuanList)
            winResultLevel = getWinResult(zhongJiangList, zixuanList)
            showWinResultMsg(winResultLevel)
        case 2:
            jixuanList = autoChoiceCaiPiao()
            showCaiPiao(zhongJiangList, jixuanList)
            winResultLevel = getWinResult(zhongJiangList, jixuanList)
            showWinResultMsg(winResultLevel)
        case _:
            break



五、总结

  1. 本彩票抽奖系统通过 Python 语言实现了一个简单但功能完整的模拟彩票抽奖过程。通过对代码的分析和实现,我们深入学习了 Python 的多种基本编程概念和技术,如函数定义、条件判断、循环结构、随机数生成、集合操作以及字符串处理等。
  2. 在代码实现过程中,我们注重了用户输入的验证和错误处理,以确保程序的稳定性和可靠性。例如,在自选功能中,对用户输入的红球和蓝球号码进行了严格的格式和范围检查,保证用户输入的合法性。同时,通过合理的函数划分,使代码结构清晰,易于理解和维护。每个函数都有明确的功能职责,如ziXuanCaiPiao函数负责处理用户自选号码的输入和验证,autoChoiceCaiPiao函数负责生成机选号码,showCaiPiao函数用于展示彩票号码,getWinResult函数用于判定中奖结果,showWinResultMsg函数用于展示中奖信息。

        通过对这个彩票抽奖系统的详细介绍和分析,我们不仅学习了 Python 编程的具体技术,还了解了如何将这些技术应用到实际的项目中,实现一个具有一定功能和逻辑的系统。希望读者能够通过阅读本文,掌握相关知识,并在自己的编程学习

作者:天冬忘忧

物联沃分享整理
物联沃-IOTWORD物联网 » Python 实现彩票抽奖系统详解(双色球)

发表回复