1. 玩法规则
“双色球”每注投注号码由 6 个红色球号码和 1 个蓝色球号码组成。红色球号码从 1—33 中选择,蓝色球号码从 1—16 中选择。 球的数字匹配数量和颜色决定了是否中奖。
2. 需求
生成本期双色球中奖号码。(注意:1.生成的红球随机有序且不可重复、2.蓝球和红球的随机范围不同且蓝球允许和红球重复)
两种产生数据方式
2.1 通过控制台输入竞猜号码
2.2 自动生成
3.记录红球、蓝球竞猜正确球的数量,并根据获奖条件输出竞猜结果和本期双色球号码
3. 代码实现
"""
1、打印欢迎界面
2、让用户选择 (选的不对一直选 死循环)
3、根据用户选择 是机选还是手选
两个方法:机选方法
手选方法
机器通过机选方法生成一个中奖号码
4、根据中奖号码和用户的号码进行比对 --方法
5、根据情况,获得奖项
6、打印用户的抽奖情况
"""
# 此方法用于获取用户自选的双色球,返回值是set集合
def getCustomBalls():
while True:
print("开始输入红球的值:")
str01 = input("请输入6个1~33的数字(使用空格隔开):")
list01 = str01.split() # []
list01 = [int(x) for x in list01]
set01 = set(list01) # {'3', '2', '1', '4', '6', '5'}
if len(set01) < 6:
print("您输入的数字不够,或者有重复,请重新输入")
continue
print(set01)
list01 = [x for x in set01 if 1 <= int(x) <= 33]
if len(list01) < 6:
print("有超过范围的数字,请重新输入")
continue
while True:
print("开始输入蓝球的数字:")
num = int(input("请输入1个1~16的数字:"))
if 1 <= num <= 16:
list01.append(num)
break
else:
print("篮球的数值不对,请重新输入")
continue
return list01
# 此方法用于随机获取一组双色球,返回值是set集合
import random
def getRandomBalls():
list01 = list()
while len(list01) < 6:
num = random.randint(1, 33)
if num not in list01:
list01.append(num)
lanNum = random.randint(1, 16)
list01.append(lanNum)
return list01
def chouJiang(user_balls, jiang_balls):
"""
红色和蓝色分来[切片],求红球之间的交集,在求长度
"""
user_hong = user_balls[:6]
jiang_hong = jiang_balls[:6]
print(user_hong, jiang_hong)
print(type(user_hong)) # <class 'list'>
s1 = set(user_hong) # 将list 转换为 set
s2 = set(jiang_hong)
print(s1 & s2)
s3 = s1 & s2
user_lan = user_balls[-1]
jiang_lan = jiang_balls[-1]
num_lan = 0
num_hong = len(s3)
if user_lan == jiang_lan:
num_lan = 1
jiang_level = 0
if num_hong == 6 and num_lan == 1:
jiang_level = 1
if num_hong == 6 and num_lan == 0:
jiang_level = 2
if num_hong == 5 and num_lan == 1:
jiang_level = 3
if (num_hong == 4 and num_lan == 1) or (num_hong == 5 and num_lan == 0):
jiang_level = 4
if (num_hong == 4 and num_lan == 0) or (num_hong == 3 and num_lan == 1):
jiang_level = 5
if (num_hong == 2 and num_lan == 1) or (num_hong == 1 and num_lan == 1) or (num_hong == 0 and num_lan == 1):
jiang_level = 6
return jiang_level
def getJiangName(jiangLevel):
match jiangLevel:
case 0:
return "没中奖", 0
case 1:
return "一等奖", 5000000
case 2:
return "二等奖", 100000
case 3:
return "三等奖", 3000
case 4:
return "四等奖", 200
case 5:
return "五等奖", 10
case 6:
return "六等奖", 5
def showMainScreen():
print("*" * 30, end = " ")
print("欢迎来到大数据双色球系统", end="")
print("*" * 30)
user_balls = set()
while True:
choiceNum = int(input("请输入您的选择:1 自选 2机选 0退出系统:"))
if choiceNum in (0, 1, 2):
break
else:
print("您的输入有无,请重新输入!")
match choiceNum:
case 0:
exit(0)
case 1:
# 自选
user_balls = getCustomBalls()
case 2:
# 机选
user_balls = getRandomBalls()
print("用户获得的彩排是:")
print(user_balls)
# 中奖号码,随机获取的
random_balls = getRandomBalls()
# 这个方法是比对用户的彩票和中奖彩排之间的关系
jiangLevel = chouJiang(user_balls, random_balls)
jiangName, jiangMoney = getJiangName(jiangLevel)
print(f"您的选择是:{user_balls}")
print(f"中奖号码是:{random_balls}")
if jiangLevel == 0:
print("很遗憾,本次没有中奖,希望下次中奖!")
else:
print("恭喜您,中了%s,中奖金额高达%d元" % (jiangName, jiangMoney))
showMainScreen()
4. 运行结果
自选:
机选: