100 casos de combate real de Xiaobai: um programa de julgamento vencedor da loteria Shuangseqiu completo e simples, adequado para os primeiros passos de Xiaobai


insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

import random
from itertools import permutations
import sys

Os módulos necessários são importados: randompara gerar números aleatórios, permutationspara computar permutações, syspara finalização do programa.

Inicializar números de loteria

insira a descrição da imagem aqui

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.choicea 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

insira a descrição da imagem aqui

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

insira a descrição da imagem aqui

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. jiang12Indica a situação de ganho do primeiro prêmio, ou seja, todos os 5 números das bolas vermelhas são iguais; jiang3indica 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 jiang43 bolas vermelhas é igual ao de 1 bola azul.

Receba o número da bola vermelha inserido pelo usuário

insira a descrição da imagem aqui

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 splituma 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. blueA lista armazena todas as combinações de números de bola vermelha, e reda lista é uma lista de números de bola vermelha de 1 a 20. Organize a lista por meio permutationsda 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.redblueall_ticketsblue

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]  # 删除用户买过的彩票

Demonstração de efeito

insira a descrição da imagem aqui

Visualização da próxima edição

Cem linhas de código Python para implementar o sistema de elogios

Acho que você gosta

Origin blog.csdn.net/qq_33681891/article/details/131850482
Recomendado
Clasificación