Рубрики
Без рубрики

HOWSE (Тамбола) Генератор билетов с помощью Python

Объявление: я недавно разработал свой собственный блог на Bytetales.co 😍😍 Пожалуйста, проверьте это. Housie aka … Теги с Python, Showdev, CodeNewie.

Объявление : Я недавно разработал свой собственный блог на Bytetales.co 😍😍 Пожалуйста, проверьте это.

Housie Aka Tambola Aka Bingo (British Version), вероятно, лучшая игра, которую нужно играть в Bostdown, чтобы наш уж ума от Короны и всех негативных новостей со всего мира и веселиться с друзьями и семьей. Я много играл на это, в последнее время. Для тех, кто не знает, что такое госпожа, позвольте мне объяснить.

HOWSE в основном игра в вероятность вероятности, в которой игроки отмечают номера на картах, так как числа вытягиваются случайным абонентом. Поэтому в начале игры все игроки получают билет [3×9 Matrix], в котором в общей сложности 27 ящиков и 15 из них заполнены отчетливым случайным числом от 1 до 90. Вот образец билета гостей.

И затем вызывающий абонент вызывает случайное число от 1 до 90, и победитель является первым человеком, чтобы отказать все свои номера. Итак, это довольно простая, но интересная и захватная игра, которую можно играть с друзьями и семьей.

Теперь есть некоторые правила для генерации билетов HOODie, и вы не можете просто случайным образом поставить 15 номеров в любых коробках по вашему выбору. Итак, давайте посмотрим правила, а затем создайте сценарий Python, который будет генерировать такое билет HOOME для нас.

Правило № 1 – Каждая строка не может иметь более 5 номеров.

Правило № 2 – Каждый столбец назначен только диапазон номеров: (EX. 1-10 может появиться только в столбце 1)

Правило № 3 – В определенной колонке цифры должны быть расположены в порядке возрастания сверху вниз.

Теперь, конечно, это громоздкое задание (и немного предвзятое, тоже) для человека, чтобы генерировать такие билеты, а для записи мы говорим не менее 20-25 билетов на игру. Так Да, это определенно не забавная задача. Итак, я подумал о создании сценария Python, который примет количество билетов, которые мы хотим генерировать в качестве ввода и вернется билеты в качестве вывода.

Я знаю, это совсем не очень модный или сложный скрипт, чтобы написать Но в любом случае я свободен в этом периоде блокировки Поэтому я думал почему нет?

Посмотрим, как мы собираемся построить этот скрипт.

Шаг 1: Создать матрицу 3×9 (массив) Zeros

import numpy as np

# Create a 2D array[3x9] of 0s
ticket_array = np.zeros((3, 9), dtype=int)

Здесь я использовал numpy Библиотека Python, чтобы создать Ticket_Array Потому что при создании одной матрицы он может быть неэффективным, но когда мы хотим создать очень большое количество списков, Numpy создает его очень быстро и, следовательно, эффективно использовать Numpy для создания массива.

Шаг 2: Случайно генерируйте 15 индексов, чтобы заполнить значения в билете.

Теперь в Numpy мы можем использовать кортеж для индексации массива. I.e. Чтобы получить первый элемент первого ряда и первого столбца от Ticket_Array мы можем использовать Ticket_Array [(0,0)] .

И так, сначала мы создадим массив Total_indices который содержит все индексы массива 3×9 в качестве кортежей (то есть (0,0), (0,1)), (0,2), …, (2,8))

И тогда мы будем случайным образом генерировать 5 индексов из каждой строки.

total_indices = [(i, j) for i in range(3) for j in range(9)]

random_indices = []


first_row = random.sample(total_indices[:9], 5)
second_row = random.sample(total_indices[9:18], 5)
third_row = random.sample(total_indices[-9:], 5)

for i in first_row:
    random_indices.append(i)

for i in second_row:
    random_indices.append(i)

for i in third_row:
    random_indices.append(i)

Шаг 3: Теперь давайте заполним эти индексы случайными значениями

Итак, давайте создадим список от 1 до 90. Затем, чтобы удовлетворить правило № 2, мы проверим номер столбца из индекса и заполнит следующее значение.

for num in random_indices:
    if num[1] == 0:
        number = random.choice(total_numbers[:10])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 1:
        number = random.choice(total_numbers[10:20])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 2:
        number = random.choice(total_numbers[20:30])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 3:
        number = random.choice(total_numbers[30:40])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 4:
        number = random.choice(total_numbers[40:50])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 5:
        number = random.choice(total_numbers[50:60])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 6:
        number = random.choice(total_numbers[60:70])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 7:
        number = random.choice(total_numbers[70:80])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0
    elif num[1] == 8:
        number = random.choice(total_numbers[80:89])
        ticket_array[num] = number
        total_numbers[total_numbers.index(number)] = 0

Шаг 4: Теперь давайте отсортировав столбец Ticket_Array

for col in range(9):

    # if all the rows are filled with a random number

    if(ticket_array[0][col] != 0 and ticket_array[1][col] != 0 and ticket_array[2][col] != 0):
        for row in range(2):
            if ticket_array[row][col] > ticket_array[row+1][col]:
                temp = ticket_array[row][col]
                ticket_array[row][col] = ticket_array[row+1][col]
                ticket_array[row+1][col] = temp


    # if 1st and 2nd row are filled by random number

    elif(ticket_array[0][col] != 0 and ticket_array[1][col] != 0 and ticket_array[2][col] == 0):
        if ticket_array[0][col] > ticket_array[1][col]:
            temp = ticket_array[0][col]
            ticket_array[0][col] = ticket_array[1][col]
            ticket_array[1][col] = temp


    # if 1st and 3rd row are filled by random number

    elif(ticket_array[0][col] != 0 and ticket_array[2][col] != 0 and ticket_array[1][col] == 0):
        if ticket_array[0][col] > ticket_array[2][col]:
            temp = ticket_array[0][col]
            ticket_array[0][col] = ticket_array[2][col]
            ticket_array[2][col] = temp

    # if 2nd and 3rd rows are filled with random numbers

    elif(ticket_array[0][col] == 0 and ticket_array[1][col] != 0 and ticket_array[2][col] != 0):
        if ticket_array[1][col] > ticket_array[2][col]:
            temp = ticket_array[1][col]
            ticket_array[1][col] = ticket_array[2][col]
            ticket_array[2][col] = temp

Шаг 5: Оберните его в функцию и распечатайте билеты.

Для печати билетов я использовал Tabulate Package из Python, используя, на котором мы можем представить матрицу и матрицу в аккуратном порядке. Узнать больше о таблицете Здесь Отказ

if __name__ == "__main__":

    # Take number of tickets from user as system argument
    numberOfTickets = sys.argv[1]
    tickets = []

    for i in range(int(numberOfTickets)):
        ticket = getTickets()
        tickets.append(ticket)

    for ticket in tickets:
        print(tabulate(ticket, tablefmt="fancy_grid", numalign="center"))

И сделано !! Теперь давайте проверим, запустив скрипт с терминала.

$ python ticket-generator.py 2 

Выход:

Вы можете проверить полный код на GitHub:

Джемсхах/Гусе-Генератор

Генератор гостей билетов с помощью Python

Первоначально опубликовано в: bytetales.co

Спасибо за чтение!

HappyCoding👨💻👩. 💻.

Оригинал: “https://dev.to/jamesshah/housie-tambola-ticket-generator-using-python-31m1”