Разобьем задачу на более простые подзадачи. Если у нас будет программа, генерирующая строку из четырёх случайных символов XXXX, то вызвав её четыре раза и склеив со знаками минуса получим искомое XXXX-XXXX-XXXX-XXXX-XXXX.
Значит нам нужна функция, генерирующая строку из случайных символов. Идем дальше — если у нас будет возможность сгенерировать один такой символ, то опять таки, мы можем сделать это четыре раза и склеить в одну строку.
Таким образом задача сводится к следующей: получить один случайный символ из указанного набора — цифры 0-9 и английские буквы A-Z.
Один из способов как это сделать — создать набор всех нужных нам символов, а дальше выбрать случайный с помощью функции choice() модуля random:
import string, random
characters = string.digits + string.ascii_uppercase
return random.choice(characters)
Пример решения задачи целиком:
import string, random, itertools
def get_random_character(characters):
while True:
yield random.choice(characters)
def get_random_string(length):
random_characters = get_random_character(string.digits + string.ascii_uppercase);
while True:
yield "".join(itertools.islice(random_characters, length))
print ("-".join(itertools.islice(get_random_string(4), 5)))
Здесь для создания строки используются генераторы и модуль itertools, но это же можно сделать и с помощью обычных циклов.