在这篇文章中,我们将为小白入门提供一个练习案例,即一个简单的双色球彩票中奖判断程序。作为计算机编程的初学者,通过完成一百个实际案例的练习,可以帮助我们逐步掌握编程的基本概念和技巧。本文将为读者提供一个具体的案例,以演示如何使用Python编写代码来解决实际问题。通过详细的解释和步骤,读者可以理解程序的运行原理,并且可以根据自己的需要进行修改和扩展。无论是对于初学者还是有一定经验的开发者,通过练习这样的案例,都能够提升编程能力和解决问题的能力。因此,本文适合所有渴望通过实践来提高编程技能的小白入门者。
import random
from itertools import permutations
import sys
导入了必要的模块:random
用于生成随机数,permutations
用于计算排列情况,sys
用于程序终止。
kaijiang_red = [x for x in range(1, 21)]
kaijiang_red_ball = random.sample(kaijiang_red, 5)
kaijiang_blue = [x for x in range(1, 11)]
kaijiang_blue_ball = random.choice(kaijiang_blue)
初始化开奖号码。通过列表推导式生成120的红球号码,并使用`random.sample`函数从中随机选取5个数字作为当期开奖的红球号码;生成110的蓝球号码,并使用random.choice
函数从中随机选取一个数字作为当期开奖的蓝球号码。
print("若城双色球\n双色球投注规则具体规定如下:\n需要投注5个红色球号码和1个蓝色球号码,提示输入后输入5个红球号码(5个号码各不相同)和1个蓝球号码,"
"红球输入数值为1~20,蓝球输入数值为1~10,每个号码之间用逗号或空格隔开。"
"\n双色球中奖规则具体规定如下:\n一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;"
"\n二等奖:投注号码与当期开奖号码中的5个红色球号码相同,即中奖;"
"\n三等奖:投注号码与当期开奖号码中的任意4个红色球号码和1个蓝色球号码相同,即中奖;"
"\n四等奖:投注号码与当期开奖号码中的任意3个红色球号码和1个蓝色球号码相同,即中奖;"
"\n例:假如当期开奖号码为:红球为1,8,13,15,18,蓝球为10,"
"小明投注号码为:红球为1,8,13,15,18,蓝球为10。则与当期号码全部相同,中一等奖。")
打印双色球的投注规则和中奖规则。
jiang12 = list(permutations(kaijiang_red_ball, 5))
jiang3_4 = list(permutations(kaijiang_red_ball, 4))
jiang3 = []
for i in range(1, 6):
for j in range(1, 21):
for x in range(len(jiang3_4)):
list1 = list(jiang3_4[x])
list1.insert(i-1, j)
jiang3.append(list1)
jiang4_3 = list(permutations(kaijiang_red_ball, 3))
jiang4_4 = []
for i in range(1, 5):
for j in range(1, 21):
for x in range(len(jiang4_3)):
list1 = list(jiang4_3[x])
list1.insert(i-1, j)
jiang4_4.append(list1)
jiang4 = []
for i in range(1, 6):
for j in range(1, 21):
for x in range(len(jiang4_4)):
list1 = list(jiang4_4[x])
list1.insert(i-1, j)
jiang4.append(list1)
计算中奖的排列情况。jiang12
表示中奖一等奖的情况,即5个红球号码全部相同;jiang3
表示中奖三等奖的情况,即4个红球号码和1个蓝球号码相同;jiang4
表示中奖四等奖的情况,即3个红球号码和1个蓝球号码相同。
x = input('请输入红球号码(用逗号或空格隔开): ')
x = x.replace(" ", ",") # 将空格替换为逗号
user_red_number = x.split(",")
user_red = [int(num) for num in user_red_number if num.strip()] # 去除空字符串和多余的空格
接收用户输入的红球号码,用逗号或空格分隔。将空格替换为逗号,然后使用split
函数分割字符串,并使用列表推导式将字符串类型的号码转换为整数类型。
if len(user_red) != 5 or len([x for x in user_red if x > 20 or x < 1]) or len(user_red) != len(set(user_red)):
print("您输入的值不符合规定")
sys.exit()
else:
print("成功输入红球号码")
判断用户输入的红球号码是否符合规定:红球号码数量必须为5个,且每个红球号码范围在1~20之间,且红球号码不能重复。如果不符合规定,则打印错误信息并终止程序;否则打印成功输入红球号码。
y = int(input('请输入蓝球号码: '))
if y > 10 or y < 1:
print("您输入的值不符合规定")
sys.exit()
else:
print("成功输入蓝球号码")
接收用户输入的蓝球号码,并将其转换为整数类型。判断蓝球号码是否符合规定:蓝球号码范围在1~10之间。如果不符合规定,则打印错误信息并终止程序;否则打印成功输入蓝球号码。
user_red_tuple = tuple(user_red)
if y == kaijiang_blue_ball:
if user_red_tuple in jiang12:
print("恭喜您中了一等奖")
elif user_red_tuple in jiang3:
print("恭喜您中了三等奖")
elif user_red_tuple in jiang4:
print("恭喜您中了四等奖")
elif user_red_tuple in jiang12:
print("恭喜您中了二等奖")
else:
print("很遗憾,您没有中奖")
判断用户是否中奖。首先将用户的红球号码转换为元组类型。如果用户选择的蓝球号码与开奖的蓝球号码相同,则判断用户的红球号码是否与中奖一等奖、三等奖、四等奖的情况相同,如果相同则打印相应的中奖信息;否则判断是否中奖二等奖。如果用户选择的蓝球号码与开奖的蓝球号码不同,则判断是否中奖一等奖。如果都不满足,则打印没有中奖的信息。
print("本期红球号码为:", kaijiang_red_ball)
print("本期蓝球号码为:", kaijiang_blue_ball)
blue = []
red = [x for x in range(1, 21)]
for rad_ball_permutation in permutations(red, 5):
blue.append(rad_ball_permutation)
all_tickets = [blue] * 10
index_one = all_tickets[y - 1].index(user_red_tuple)
del all_tickets[y - 1][index_one]
用列表模拟数据库中的彩票数据,生成所有可能的红球号码组合。blue
列表存储了所有的红球号码组合,red
列表是1~20的红球号码列表。通过permutations
函数对red
列表进行排列,得到所有的红球号码组合,并将其添加到blue
列表中。最终得到一个具有10个元素的列表all_tickets
,其中每个元素都是blue
列表的引用。
然后,根据用户选择的蓝球号码和红球号码,找到对应的索引位置,并删除该索引位置的彩票。
from itertools import permutations
import sys
# 初始化开奖号码
kaijiang_red = [x for x in range(1, 21)]
kaijiang_red_ball = random.sample(kaijiang_red, 5) # 从kaijiang_red中随机选取5个数作为红球号码
kaijiang_blue = [x for x in range(1, 11)]
kaijiang_blue_ball = random.choice(kaijiang_blue) # 从kaijiang_blue中随机选择一个数作为蓝球号码
# 双色球说明
print("若城双色球\n双色球投注规则具体规定如下:\n需要投注5个红色球号码和1个蓝色球号码,提示输入后输入5个红球号码(5个号码各不相同)和1个蓝球号码,"
"红球输入数值为1~20,蓝球输入数值为1~10,每个号码之间用逗号或空格隔开。"
"\n双色球中奖规则具体规定如下:\n一等奖:投注号码与当期开奖号码全部相同(顺序不限,下同),即中奖;"
"\n二等奖:投注号码与当期开奖号码中的5个红色球号码相同,即中奖;"
"\n三等奖:投注号码与当期开奖号码中的任意4个红色球号码和1个蓝色球号码相同,即中奖;"
"\n四等奖:投注号码与当期开奖号码中的任意3个红色球号码和1个蓝色球号码相同,即中奖;"
"\n例:假如当期开奖号码为:红球为1,8,13,15,18,蓝球为10,"
"小明投注号码为:红球为1,8,13,15,18,蓝球为10。则与当期号码全部相同,中一等奖。")
# 计算排列情况
jiang12 = list(permutations(kaijiang_red_ball, 5)) # 计算5个红色球号码的全排列
jiang3_4 = list(permutations(kaijiang_red_ball, 4)) # 计算4个红色球号码的全排列
jiang3 = []
for i in range(1, 6):
for j in range(1, 21):
for x in range(len(jiang3_4)):
list1 = list(jiang3_4[x])
list1.insert(i-1, j)
jiang3.append(list1) # 将其中一个位置插入1-20之间的数,生成符合条件的三等奖的号码
jiang4_3 = list(permutations(kaijiang_red_ball, 3)) # 计算3个红色球号码的全排列
jiang4_4 = []
for i in range(1, 5):
for j in range(1, 21):
for x in range(len(jiang4_3)):
list1 = list(jiang4_3[x])
list1.insert(i-1, j)
jiang4_4.append(list1) # 将其中一个位置插入1-20之间的数,生成符合条件的四等奖的号码
jiang4 = []
for i in range(1, 6):
for j in range(1, 21):
for x in range(len(jiang4_4)):
list1 = list(jiang4_4[x])
list1.insert(i-1, j)
jiang4.append(list1) # 将其中一个位置插入1-20之间的数,生成符合条件的四等奖的号码
# 用户输入
x = input('请输入红球号码(用逗号或空格隔开): ')
x = x.replace(" ", ",") # 将空格替换为逗号
user_red_number = x.split(",") # 使用逗号分割字符串得到红球号码列表
user_red = [int(num) for num in user_red_number if num.strip()] # 去除空字符串和多余的空格,并将数字转换为整数
if len(user_red) != 5 or len([x for x in user_red if x > 20 or x < 1]) or len(user_red) != len(set(user_red)):
print("您输入的值不符合规定")
sys.exit()
else:
print("成功输入红球号码")
y = int(input('请输入蓝球号码: '))
if y > 10 or y < 1:
print("您输入的值不符合规定")
sys.exit()
else:
print("成功输入蓝球号码")
# 判断是否中奖
user_red_tuple = tuple(user_red)
if y == kaijiang_blue_ball:
if user_red_tuple in jiang12:
print("恭喜您中了一等奖")
elif user_red_tuple in jiang3:
print("恭喜您中了三等奖")
elif user_red_tuple in jiang4:
print("恭喜您中了四等奖")
elif user_red_tuple in jiang12:
print("恭喜您中了二等奖")
else:
print("很遗憾,您没有中奖")
print("本期红球号码为:", kaijiang_red_ball)
print("本期蓝球号码为:", kaijiang_blue_ball)
# 用all列表模拟在数据库中删除用户买过的彩票
blue = []
red = [x for x in range(1, 21)]
for rad_ball_permutation in permutations(red, 5):
blue.append(rad_ball_permutation) # 生成所有可能的红球号码和对应的全排列存入blue列表
all_tickets = [blue] * 10 # 生成包含10个blue列表的all_tickets列表
index_one = all_tickets[y - 1].index(user_red_tuple) # 找到用户买过的彩票在all_tickets中的位置
del all_tickets[y - 1][index_one] # 删除用户买过的彩票