#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)}")