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


在这里插入图片描述

前言

在这篇文章中,我们将为小白入门提供一个练习案例,即一个简单的双色球彩票中奖判断程序。作为计算机编程的初学者,通过完成一百个实际案例的练习,可以帮助我们逐步掌握编程的基本概念和技巧。本文将为读者提供一个具体的案例,以演示如何使用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]  # 删除用户买过的彩票

效果演示

在这里插入图片描述

下期预告

Python百行代码实现赞系统

猜你喜欢

转载自blog.csdn.net/qq_33681891/article/details/131850482