目录
一、系统功能概述
二、代码实现详解
(一)自选功能实现(ziXuanCaiPiao函数)
(二)机选功能实现(autoChoiceCaiPiao函数)
(三)彩票展示功能实现(showCaiPiao函数)
(四)中奖结果判定功能实现(getWinResult函数)
(五)中奖结果信息展示功能实现(showWinResultMsg函数)
(六)主程序逻辑(while循环部分)
三、系统运行效果展示
四、完整代码展示
五、总结
在当今数字化的时代,编程已经成为了一项极具价值的技能,它能够帮助我们解决各种实际问题,实现丰富多样的功能。本文将详细介绍一个使用 Python 语言实现的彩票抽奖系统。通过这个系统,我们可以深入了解 Python 的基本语法、函数定义、流程控制以及如何与用户进行交互等方面的知识。这个彩票抽奖系统模拟了现实中彩票购买、抽奖和中奖结果判定的过程,具有一定的趣味性和实用性,对于初学者来说是一个很好的实践项目,同时也能为有一定编程基础的开发者提供一些参考和启发。
一、系统功能概述
- 打印欢迎界面:当用户运行程序时,首先会看到一个友好的欢迎界面,向用户展示彩票中心的相关信息,营造出一种真实的彩票购买场景。
- 用户选择功能:用户可以在自选和机选两种方式中进行选择,以确定彩票号码的生成方式。如果用户输入的选择不正确,程序会通过死循环一直提示用户重新选择,直到用户输入正确的选项。
- 号码生成功能
- 机选方法:机器通过随机算法生成一组符合彩票规则的号码,包括 6 个 1~33 之间的不重复红球和 1 个 1~16 之间的蓝球。
- 自选方法:用户根据提示手动输入 6 个 1~33 之间的不重复数字作为红球号码,以及 1 个 1~16 之间的数字作为蓝球号码。如果用户输入的数字不符合要求,程序会给出相应的提示。
- 号码比对功能:将用户选择的彩票号码与机器生成的中奖号码进行比对,以确定用户是否中奖以及中奖的奖项等级。
- 奖项判定功能:根据号码比对的结果,按照预先设定的规则判定用户中了哪个奖项,奖项分为一等奖至六等奖以及未中奖。
- 打印抽奖情况:最后,程序会将用户选择的彩票号码、中奖号码以及用户的中奖结果详细地打印出来,让用户清楚地了解自己的抽奖情况。
二、代码实现详解
(一)自选功能实现(ziXuanCaiPiao
函数)
- 代码逻辑
- 首先,函数通过
input
函数获取用户输入的 6 个 1~33 之间的数字,并用空格隔开。然后,将用户输入的字符串通过split
方法分割成一个列表list01
。 - 接着,对
list01
进行筛选,只保留 1 到 33 之间的数字,将其转换为整数后存入list01
。然后,将list01
转换为集合set1
,通过判断集合的长度是否为 6 来确定用户输入的数字个数是否正确且不重复。如果不符合要求,打印提示信息 “您输入的数字个数不对或者不规范”。 - 如果红球数字输入正确,函数继续提示用户输入一个 1~16 之间的数字作为蓝球号码。如果用户输入的是数字且在 1 到 16 的范围内,将蓝球号码添加到列表中,并对列表进行排序后返回。如果蓝球输入不符合要求,打印提示信息 “您输入的蓝球不符合要求”。
- 首先,函数通过
- 代码示例
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 到 33 的整数列表
list01
。然后,通过一个循环,每次随机从list01
中选取一个索引,将该索引对应的数字取出作为红球号码,并从list01
中删除该数字,以保证红球号码不重复。循环 6 次,得到 6 个红球号码,并将其存入autoList
中,然后对autoList
进行排序。 - 对于蓝球的生成,函数通过
random.randint(1, 16)
随机生成一个 1 到 16 之间的整数作为蓝球号码,并添加到autoList
中。最后,将autoList
中的数字转换为字符串列表后返回。
- 对于红球的生成,函数首先创建一个包含 1 到 33 的整数列表
- 代码示例
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
函数)
- 代码逻辑
- 函数接收中奖号码列表
zjList
和用户购买的彩票号码列表buyList
作为参数。 - 首先,分别从
buyList
和zjList
中提取红球号码和蓝球号码。红球号码是列表的前 6 个元素,蓝球号码是列表的第 7 个元素(索引为 6)。 - 然后,将红球号码列表转换为字符串,并用逗号连接,以便于显示。
- 最后,使用
print
函数分别打印出用户选择的彩票号码和中奖号码的格式为 “红球:[红球号码列表] 蓝球:[蓝球号码]” 的信息。
- 函数接收中奖号码列表
- 代码示例
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
函数)
- 代码逻辑
- 函数接收中奖号码列表
zjList
和用户购买的彩票号码列表buyList
作为参数。 - 首先,将
buyList
和zjList
中的红球号码分别提取出来并转换为集合buyRedSet
和zjRedSet
,通过计算两个集合的交集jiaoJiSet
的长度,得到用户选中的红球个数redNum
。 - 然后,分别获取用户购买的蓝球号码
buyBlue
和中奖的蓝球号码zjBlue
。 - 最后,根据预先设定的中奖规则,通过一系列的条件判断来确定用户的中奖等级。如果用户中了一等奖(6 个红球全中且蓝球也中),则返回 1;中二等奖(6 个红球全中但蓝球未中),返回 2;以此类推,根据不同的中奖情况返回相应的数字。如果用户未中奖,则返回 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
(五)中奖结果信息展示功能实现(showWinResultMsg
函数)
- 代码逻辑
- 函数使用 Python 的
match-case
结构来根据传入的中奖结果等级winResultLevel
打印相应的中奖信息。 - 当
winResultLevel
为 0 时,打印 “没有中奖,再接再厉”;为 1 时,打印 “恭喜您中了一等奖,至少 500 万”;为 2 时,打印 “恭喜您中了二等奖,至少 300 万”;以此类推,对应不同的奖项等级打印相应的中奖提示信息。
- 函数使用 Python 的
- 代码示例
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 表示机选,0 表示退出系统。
- 用户输入选择后,通过
match-case
结构来处理不同的选择。 - 当用户选择 1(自选)时,调用
ziXuanCaiPiao
函数获取用户自选的彩票号码zixuanList
,然后调用showCaiPiao
函数展示中奖号码和用户选择的号码,接着调用getWinResult
函数获取中奖结果等级,并调用showWinResultMsg
函数展示中奖信息。 - 当用户选择 2(机选)时,调用
autoChoiceCaiPiao
函数两次,一次生成中奖号码zhongJiangList
,另一次生成用户的机选号码jixuanList
。然后进行与自选相同的操作,展示号码、判定中奖结果并展示中奖信息。 - 当用户选择其他选项(默认情况,即输入不是 1、2 或 0 时),程序继续循环,提示用户重新输入选择。
- 当用户选择 0 时,循环结束,程序退出。
- 代码示例
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
五、总结
- 本彩票抽奖系统通过 Python 语言实现了一个简单但功能完整的模拟彩票抽奖过程。通过对代码的分析和实现,我们深入学习了 Python 的多种基本编程概念和技术,如函数定义、条件判断、循环结构、随机数生成、集合操作以及字符串处理等。
- 在代码实现过程中,我们注重了用户输入的验证和错误处理,以确保程序的稳定性和可靠性。例如,在自选功能中,对用户输入的红球和蓝球号码进行了严格的格式和范围检查,保证用户输入的合法性。同时,通过合理的函数划分,使代码结构清晰,易于理解和维护。每个函数都有明确的功能职责,如
ziXuanCaiPiao
函数负责处理用户自选号码的输入和验证,autoChoiceCaiPiao
函数负责生成机选号码,showCaiPiao
函数用于展示彩票号码,getWinResult
函数用于判定中奖结果,showWinResultMsg
函数用于展示中奖信息。
通过对这个彩票抽奖系统的详细介绍和分析,我们不仅学习了 Python 编程的具体技术,还了解了如何将这些技术应用到实际的项目中,实现一个具有一定功能和逻辑的系统。希望读者能够通过阅读本文,掌握相关知识,并在自己的编程学习