100 casos del combate real de Xiaobai: un programa completo y simple de sentencia ganadora de la lotería Shuangseqiu, adecuado para los primeros pasos de Xiaobai


inserte la descripción de la imagen aquí

prefacio

En este artículo, proporcionaremos un caso de práctica para que Xiaobai comience, es decir, un programa simple de juicio ganador de lotería de bolas de dos colores. Como principiante en programación de computadoras, a través de la práctica de cien casos prácticos, puede ayudarnos a dominar gradualmente los conceptos básicos y las habilidades de programación. Este artículo proporcionará a los lectores un caso concreto para demostrar cómo usar Python para escribir código para resolver problemas reales. A través de explicaciones y pasos detallados, los lectores pueden comprender el principio operativo del programa y pueden modificarlo y ampliarlo según sus propias necesidades. Ya sea para principiantes o desarrolladores experimentados, al practicar estos casos, pueden mejorar su capacidad de programación y su capacidad de resolución de problemas. Por lo tanto, este artículo es adecuado para todos los principiantes que deseen mejorar sus habilidades de programación a través de la práctica.

importar los módulos necesarios

inserte la descripción de la imagen aquí

import random
from itertools import permutations
import sys

Se importan los módulos necesarios: randompara generar números aleatorios, permutationspara calcular permutaciones, syspara la terminación de programas.

Inicializar números de lotería

inserte la descripción de la imagen aquí

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)

Inicialice los números de la lotería. Genere un número de bola roja de 1 20 a través de la comprensión de la lista y use la función `random.sample` para seleccionar aleatoriamente 5 números como el número de bola roja para la lotería actual; genere un número de bola azul de 1 10 y use random.choicela función para seleccionar aleatoriamente un número como el número de bola azul para la lotería actual.

Shuangseqiu reglas de apuestas y reglas ganadoras

inserte la descripción de la imagen aquí

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。则与当期号码全部相同,中一等奖。")

Imprime las reglas de apuestas y las reglas ganadoras de Shuangseqiu.

Calcular la clasificación de los premios ganadores

inserte la descripción de la imagen aquí

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)

Calcular la permutación de los premios ganadores. jiang12Indica la situación de ganar el primer premio, es decir, todos los números de las 5 bolas rojas son iguales; jiang3indica la situación de ganar el tercer premio, es decir, el número de 4 bolas rojas es el mismo que el de 1 bola azul; indica la situación de ganar jiang4el cuarto premio, es decir, el número de 3 bolas rojas es el mismo que el de 1 bola azul.

Recibir el número de bola roja ingresado por el usuario

inserte la descripción de la imagen aquí

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

Recibe los números de bola roja ingresados ​​por el usuario, separados por comas o espacios. Reemplace los espacios con comas, luego use splituna función para dividir la cadena y use una lista de comprensión para convertir un número de tipo cadena en un tipo entero.

Determinar si el número de bola roja introducido por el usuario cumple con la normativa

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("成功输入红球号码")

Juzgando si los números de bola roja ingresados ​​por el usuario cumplen con los requisitos: la cantidad de números de bola roja debe ser 5, y el rango de cada número de bola roja es entre 1 y 20, y los números de bola roja no se pueden repetir. Si no cumple con los requisitos, imprima un mensaje de error y finalice el programa; de lo contrario, imprima el número de bola roja ingresado con éxito.

Recibir el número de bola azul ingresado por el usuario

y = int(input('请输入蓝球号码: '))

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

Reciba el número de baloncesto ingresado por el usuario y conviértalo a un tipo de número entero. A juzgar si el número de baloncesto cumple con las normas: el número de baloncesto va del 1 al 10. Si no cumple con los requisitos, imprima un mensaje de error y finalice el programa; de lo contrario, imprima correctamente el número de bola azul ingresado.

Determinar si el usuario ha ganado la lotería

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("很遗憾,您没有中奖")

Determinar si el usuario ha ganado un premio. Primero convierta el número de bola roja del usuario en un tipo de tupla. Si el número de bola azul seleccionado por el usuario es el mismo que el número de bola azul de la lotería, se juzga si el número de bola roja del usuario es el mismo que el primer premio, el tercer premio y el cuarto premio, y si son los mismos, se imprime la información ganadora correspondiente; Si el número de bola azul seleccionado por el usuario es diferente del número de bola azul de la lotería, se juzga si gana el primer premio. Si no está satisfecho, imprima la información de que no hay ganancias.

Imprimir números de lotería actuales

print("本期红球号码为:", kaijiang_red_ball)
print("本期蓝球号码为:", kaijiang_blue_ball)

Genere todas las combinaciones posibles de números de bolas rojas y elimine la lotería seleccionada por el usuario

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 los datos de la lotería en la base de datos con una lista para generar todas las combinaciones posibles de números de bolas rojas. blueLa lista almacena todas las combinaciones de números de bolas rojas, y redla lista es una lista de números de bolas rojas del 1 al 20. Organice la lista a través permutationsde la función para obtener todas las combinaciones de números de bolas rojas y agregarlas a la lista. Terminas con una lista con 10 elementos , donde cada elemento es una referencia a la lista.redblueall_ticketsblue

Luego, de acuerdo con el número de bola azul y el número de bola roja seleccionados por el usuario, busque la posición de índice correspondiente y elimine el boleto de lotería en la posición de í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]  # 删除用户买过的彩票

Demostración de efectos

inserte la descripción de la imagen aquí

Vista previa del próximo número

Cien líneas de código Python para implementar el sistema de elogios

Supongo que te gusta

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