Если вам нужен трехзначный номер и вы хотите, чтобы 001-099 были действительными числами, вы все равно должны использовать randrange / randint, так как это быстрее, чем альтернативы. Просто добавьте необходимые предшествующие нули при преобразовании в строку.
import random
num = random.randrange(1, 10**3)
# using format
num_with_zeros = '{:03}'.format(num)
# using string's zfill
num_with_zeros = str(num).zfill(3)
В качестве альтернативы, если вы не хотите сохранять случайное число как целое число, вы можете просто сделать это как oneliner:
'{:03}'.format(random.randrange(1, 10**3))
Python 3.6+ только один вкладыш:
f'{random.randrange(1, 10**3):03}'
Пример выходных данных:
Реализовано как функция:
import random
def n_len_rand(len_, floor=1):
top = 10**len_
if floor > top:
raise ValueError(f"Floor {floor} must be less than requested top {top}")
return f'{random.randrange(floor, top):0{len_}}'