Diretório de artigos
- prefácio
- importar os módulos necessários
- Inicializar números de loteria
- Regras de apostas Shuangseqiu e regras vencedoras
- Calcule a classificação dos prêmios vencedores
- Receba o número da bola vermelha inserido pelo usuário
- Determine se o número da bola vermelha inserido pelo usuário está em conformidade com os regulamentos
- Receba o número da bola azul digitado pelo usuário
- Determinar se o usuário ganhou na loteria
- Imprimir números de loteria atuais
- Gere todas as combinações possíveis de números de bola vermelha e exclua a loteria selecionada pelo usuário
- código completo
- Demonstração de efeito
- Visualização da próxima edição
prefácio
Neste artigo, forneceremos um caso prático para o Xiaobai começar, ou seja, um programa simples de julgamento vencedor da loteria de bolas de duas cores. Como iniciante em programação de computadores, através da prática de cem casos práticos, pode nos ajudar a dominar gradualmente os conceitos básicos e habilidades de programação. Este artigo fornecerá aos leitores um caso concreto para demonstrar como usar o Python para escrever código para resolver problemas reais. Por meio de explicações e etapas detalhadas, os leitores podem entender o princípio de funcionamento do programa, podendo modificá-lo e expandi-lo de acordo com suas próprias necessidades. Seja para iniciantes ou desenvolvedores experientes, praticando esses casos, eles podem melhorar sua capacidade de programação e capacidade de resolução de problemas. Portanto, este artigo é adequado para todos os iniciantes que desejam melhorar suas habilidades de programação por meio da prática.
importar os módulos necessários
import random
from itertools import permutations
import sys
Os módulos necessários são importados: random
para gerar números aleatórios, permutations
para computar permutações, sys
para finalização do programa.
Inicializar números de loteria
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)
Inicialize os números da loteria. Gere um número de bola vermelha de 1 20 por meio da compreensão de lista e use a função `random.sample` para selecionar aleatoriamente 5 números dele como o número de bola vermelha para a loteria atual; gere um número de bola azul de 1 10 e use random.choice
a função para selecionar aleatoriamente um número como o número de bola azul para a loteria atual.
Regras de apostas Shuangseqiu e regras vencedoras
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。则与当期号码全部相同,中一等奖。")
Imprima as regras de apostas e regras vencedoras de Shuangseqiu.
Calcule a classificação dos prêmios vencedores
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)
Calcule a permutação dos prêmios vencedores. jiang12
Indica a situação de ganho do primeiro prêmio, ou seja, todos os 5 números das bolas vermelhas são iguais; jiang3
indica a situação de ganho do terceiro prêmio, ou seja, o número de 4 bolas vermelhas é igual ao de 1 bola azul; indica a situação de ganho do quarto prêmio, ou seja, o número de jiang4
3 bolas vermelhas é igual ao de 1 bola azul.
Receba o número da bola vermelha inserido pelo usuário
x = input('请输入红球号码(用逗号或空格隔开): ')
x = x.replace(" ", ",") # 将空格替换为逗号
user_red_number = x.split(",")
user_red = [int(num) for num in user_red_number if num.strip()] # 去除空字符串和多余的空格
Receba os números de bola vermelha inseridos pelo usuário, separados por vírgulas ou espaços. Substitua os espaços por vírgulas, use split
uma função para dividir a string e use uma compreensão de lista para converter um número do tipo string em um tipo inteiro.
Determine se o número da bola vermelha inserido pelo usuário está em conformidade com os regulamentos
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("成功输入红球号码")
Julgar se os números de bola vermelha inseridos pelo usuário atendem aos requisitos: o número de números de bola vermelha deve ser 5, e o intervalo de cada número de bola vermelha está entre 1 e 20, e os números de bola vermelha não podem ser repetidos. Se não atender aos requisitos, imprima uma mensagem de erro e encerre o programa; caso contrário, imprima o número da bola vermelha inserido com sucesso.
Receba o número da bola azul digitado pelo usuário
y = int(input('请输入蓝球号码: '))
if y > 10 or y < 1:
print("您输入的值不符合规定")
sys.exit()
else:
print("成功输入蓝球号码")
Receba o número de basquete inserido pelo usuário e converta-o em um tipo inteiro. Julgando se o número de basquete atende aos regulamentos: o número de basquete varia de 1 a 10. Se não atender aos requisitos, imprima uma mensagem de erro e encerre o programa; caso contrário, imprima o número da bola azul digitado com sucesso.
Determinar se o usuário ganhou na loteria
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("很遗憾,您没有中奖")
Determine se o usuário ganhou um prêmio. Primeiro, converta o número da bola vermelha do usuário em um tipo de tupla. Se o número da bola azul selecionado pelo usuário for igual ao número da bola azul da loteria, julga-se se o número da bola vermelha do usuário é igual ao primeiro prêmio, terceiro prêmio e quarto prêmio e, se forem iguais, é impressa a informação vencedora correspondente; Se o número da bola azul selecionado pelo usuário for diferente do número da bola azul da loteria, é julgado se ganha o primeiro prêmio. Se não estiver satisfeito, imprima a informação de que não há vitória.
Imprimir números de loteria atuais
print("本期红球号码为:", kaijiang_red_ball)
print("本期蓝球号码为:", kaijiang_blue_ball)
Gere todas as combinações possíveis de números de bola vermelha e exclua a loteria selecionada pelo usuário
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]
Simule os dados da loteria no banco de dados com uma lista para gerar todas as combinações possíveis de números de bola vermelha. blue
A lista armazena todas as combinações de números de bola vermelha, e red
a lista é uma lista de números de bola vermelha de 1 a 20. Organize a lista por meio permutations
da função para obter todas as combinações de números de bola vermelha e adicioná-los à lista. Você acaba com uma lista com 10 elementos , onde cada elemento é uma referência à lista.red
blue
all_tickets
blue
Em seguida, de acordo com o número da bola azul e o número da bola vermelha selecionados pelo usuário, encontre a posição do índice correspondente e exclua o bilhete de loteria na posição do índice.
código completo
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] # 删除用户买过的彩票