前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白实战100案例: 完整简单的双色球彩票中奖判断程序,适合小白入门

小白实战100案例: 完整简单的双色球彩票中奖判断程序,适合小白入门

作者头像
全栈若城
发布2024-02-29 19:23:58
3870
发布2024-02-29 19:23:58
举报
文章被收录于专栏:若城技术专栏

前言

在这篇文章中,我们将为小白入门提供一个练习案例,即一个简单的双色球彩票中奖判断程序。作为计算机编程的初学者,通过完成一百个实际案例的练习,可以帮助我们逐步掌握编程的基本概念和技巧。本文将为读者提供一个具体的案例,以演示如何使用Python编写代码来解决实际问题。通过详细的解释和步骤,读者可以理解程序的运行原理,并且可以根据自己的需要进行修改和扩展。无论是对于初学者还是有一定经验的开发者,通过练习这样的案例,都能够提升编程能力和解决问题的能力。因此,本文适合所有渴望通过实践来提高编程技能的小白入门者。

导入必要的模块

代码语言:javascript
复制
import random
from itertools import permutations
import sys

导入了必要的模块:random用于生成随机数,permutations用于计算排列情况,sys用于程序终止。

初始化开奖号码

代码语言:javascript
复制
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函数从中随机选取一个数字作为当期开奖的蓝球号码。

双色球的投注规则和中奖规则

代码语言:javascript
复制
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。则与当期号码全部相同,中一等奖。")

打印双色球的投注规则和中奖规则。

计算中奖的排列情况

代码语言:javascript
复制
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个蓝球号码相同。

接收用户输入的红球号码

代码语言:javascript
复制
x = input('请输入红球号码(用逗号或空格隔开): ')
x = x.replace(" ", ",")  # 将空格替换为逗号
user_red_number = x.split(",")
user_red = [int(num) for num in user_red_number if num.strip()]  # 去除空字符串和多余的空格

接收用户输入的红球号码,用逗号或空格分隔。将空格替换为逗号,然后使用split函数分割字符串,并使用列表推导式将字符串类型的号码转换为整数类型。

判断用户输入的红球号码是否符合规定

代码语言:javascript
复制
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之间,且红球号码不能重复。如果不符合规定,则打印错误信息并终止程序;否则打印成功输入红球号码。

接收用户输入的蓝球号码

代码语言:javascript
复制
y = int(input('请输入蓝球号码: '))

if y > 10 or y < 1:
    print("您输入的值不符合规定")
    sys.exit()
else:
    print("成功输入蓝球号码")

接收用户输入的蓝球号码,并将其转换为整数类型。判断蓝球号码是否符合规定:蓝球号码范围在1~10之间。如果不符合规定,则打印错误信息并终止程序;否则打印成功输入蓝球号码。

判断用户是否中奖

代码语言:javascript
复制
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("很遗憾,您没有中奖")

判断用户是否中奖。首先将用户的红球号码转换为元组类型。如果用户选择的蓝球号码与开奖的蓝球号码相同,则判断用户的红球号码是否与中奖一等奖、三等奖、四等奖的情况相同,如果相同则打印相应的中奖信息;否则判断是否中奖二等奖。如果用户选择的蓝球号码与开奖的蓝球号码不同,则判断是否中奖一等奖。如果都不满足,则打印没有中奖的信息。

打印当期的开奖号码

代码语言:javascript
复制
print("本期红球号码为:", kaijiang_red_ball)
print("本期蓝球号码为:", kaijiang_blue_ball)

生成所有可能的红球号码组合并删除用户选中的彩票

代码语言:javascript
复制
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列表的引用。

然后,根据用户选择的蓝球号码和红球号码,找到对应的索引位置,并删除该索引位置的彩票。

完整代码

代码语言:javascript
复制
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]  # 删除用户买过的彩票

效果演示

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-02-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 导入必要的模块
  • 初始化开奖号码
  • 双色球的投注规则和中奖规则
  • 计算中奖的排列情况
  • 接收用户输入的红球号码
  • 判断用户输入的红球号码是否符合规定
  • 接收用户输入的蓝球号码
  • 判断用户是否中奖
  • 打印当期的开奖号码
  • 生成所有可能的红球号码组合并删除用户选中的彩票
  • 完整代码
  • 效果演示
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档