Сгенерировать формат следующих строк — в случайном порядке

#python #python-3.x #random

#python #python-3.x #Случайный

Вопрос:

Проблема под рукой

В настоящее время я работаю над созданием генератора кода по причинам, не связанным с вопросом.

Коды соответствуют формату 00|letter|8string mix|letter

Примеры ожидаемых конечных результатов таковы:

00b06c1161bc
00aee797645b

00c435ab439e
00da494a229a

Быстрая разбивка средней строки из 8 разделов приводит к требованию не более двух буквенных символов и 6 чисел, которые могут быть в случайном порядке.

Хотя у меня возникают трудности с этим, возникает дополнительная проблема с ограниченным количеством принятых писем. Это буквы, a , b , c , d , e , и f

Я создал list ( acceptedChars=["a","b","c","d","e","f"] ) для извлечения из генератора, однако как разрешить ему использовать это для генерации в соответствии с требованиями, которые я не уверен, как выполнить.

Любая информация об этом была бы замечательной, если у вас есть какие-либо вопросы, прокомментируйте, и я обязательно отвечу на это.

Комментарии:

1. Когда вы говорите максимум 2 альфа-символа, означает ли это, что в некоторых случаях также может быть 0 альфа-символов?

2. Привет @SayandipDutta, да, это означает, что 0 буквенных символов возможно.

Ответ №1:

Вот полная реализация кода с использованием функции random.

Этот код сгенерирует вам 100 случайных кодов 12 символов.

Приведенный ниже код также адресует requirement of a maximum of two alpha-characters and 6 numbers that can be in random order

 import random

acceptedChars = list('abcdef')
acceptedDigit = list('0123456789')

for i in range(100):
    secretCode = '00'   random.choice(acceptedChars)
    charCount = digitCount = 0

    pos1 = random.randint(1,8)
    pos2 = pos1
    while pos2 == pos1: pos2 = random.randint(1,8)

    for i in range(1,9):
        if i in (pos1,pos2):
            secretCode  = random.choice(acceptedChars)
        else:
            secretCode  = random.choice(acceptedDigit)

    secretCode  = random.choice(acceptedChars)

    print (secretCode)
 

Пример вывода случайных кодов (сгенерировано 10):

 00e89642be3c
00ba75d2130e
00b56c9b906b
00da9294e87c
00b3664ce97f
00c4b6681a3e
00e6699f75cf
00d369d07a0a
00ce653a228f
00d5665f95bd
 

Комментарии:

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

2. Обновлено для удовлетворения ваших требований в 2 символа и 6 цифр

Ответ №2:

Я думаю random.choice , это то, что вы хотите:

 import random
acceptedChars = ["a","b","c","d","e","f"]
x = random.choice(acceptedChars)
y = random.choice(acceptedChars)
 

Комментарии:

1. для числа вы можете указать random.randint(0,9)

2. Для цифр я рекомендую: import string; random.choice(string.digits)

3. или, если вы ищете микс, вы можете иметь a thru f and 0 thru 9 в том же acceptedChars списке

4. Я знаю об random.choice этом и активно использую его для рандомизированного выбора первого и последнего буквенных символов. Вопрос, однако, касается смешивания как буквенных, так и цифровых символов в одну строку длиной 8, при этом максимальное количество буквенных символов равно 2. например: endString = ''.join(random.choice(string.ascii_uppercase string.ascii_lowercase string.digits) for _ in range(8)) хотя это позволяет генерировать смешанную строку как из букв, так и из цифр, буквенные символы выходят за рамки принятых, и нет способа установите ограничение на общее количество двух букв.

Ответ №3:

Проверьте весь этот код на предмет вашей проблемы. Может быть, вы найдете что-нибудь полезное. Я сделал это с меньшей сложностью, чем O (n2).

Это программа генерации случайных строк для проверки.
Этот код также удовлетворяет максимальным требованиям 2 alpha.

 import random
def code():
    acceptedChars=["a","b","c","d","e","f"]
    first = "00"
    second = random.choice(acceptedChars)
    third = ""
    fourth = random.choice(acceptedChars) 

    # for third part

    slot = random.randint(0,2)
    if (slot == 2):
        number = str(random.randint(100000,1000000))
        alpha1 = random.choice(acceptedChars)
        alpha2 = random.choice(acceptedChars)
        part1 = random.randint(0,6)
        part2 = random.randint(part1,6)
        third = number[:part1]   alpha1   number[part1:part2]   alpha2   number[part2:]
    elif (slot == 1):
        number = str(random.randint(1000000,10000000))
        alpha = random.choice(acceptedChars)
        slot = random.randint(0,8)
        third = number[:slot]   alpha   number[slot:]
    else:
        third = str(random.randint(10000000,100000000))

    
    return first   second   third   fourth


print(code())
 

Надеюсь, это поможет.

Вывод выглядит следующим образом:

 00d65262056f
00a317c8015e
00a334564ecf
00e14a657d9c
 

Комментарии:

1. Не требуется наличие буквенных символов в любой позиции в третьем разделе. Вы заставляете код размещать 2 альфа-символа рядом друг с другом.

Ответ №4:

 import string
import random

allowed_chars = string.ascii_letters[:6]

expression = ''.join(random.choices(allowed_chars   string.digits, k=8))
print(f"The generator is 00{str(expression)}")