Скажем, мне нужно трехзначное число, это будет примерно так:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
Чтобы получить случайное трехзначное число:
from random import randint
randint(100, 999) # randint is inclusive at both ends
(при условии, что вы действительно имели в виду три цифры, а не «до трех цифр».)
Чтобы использовать произвольное количество цифр:
from random import randint
def random_with_N_digits(n):
range_start = 10**(n-1)
range_end = (10**n)-1
return randint(range_start, range_end)
print random_with_N_digits(2)
print random_with_N_digits(3)
print random_with_N_digits(4)
Вывод:
33
124
5127
Если вам нужна строка (например, 10-значный номер телефона), вы можете использовать это:
источник
Если вам нужно трехзначное число и вы хотите, чтобы 001-099 были действительными числами, вы все равно должны использовать randrange / randint, так как это быстрее, чем альтернативы. Просто добавьте необходимые предшествующие нули при преобразовании в строку.
В качестве альтернативы, если вы не хотите сохранять случайное число как int, вы можете просто сделать это как одиночный лайнер:
python 3.6+ только один лайнер:
Примеры результатов вышеуказанного:
Реализовано как функция:
источник
Считается ли 0 возможной первой цифрой? Если да, то вам нужно
random.randint(0,10**n-1)
. Если нет, тоrandom.randint(10**(n-1),10**n-1)
. И если ноль никогда не допускается, вам придется явно отклонять числа с нулем в них или рисоватьn
random.randint(1,9)
числа.В сторону: интересно, что
randint(a,b)
для получения случайного числа используется несколько непифоническая «индексация»a <= n <= b
. Можно было ожидать, что это сработаетrange
и выдаст случайное числоa <= n < b
. (Обратите внимание на закрытый верхний интервал.)Учитывая ответы в комментариях о
randrange
, отметим , что они могут быть заменены на уборщикаrandom.randrange(0,10**n)
,random.randrange(10**(n-1),10**n)
иrandom.randrange(1,10)
.источник
a <= n <= b
меня тоже удивил. Я негодую, чтобы добавить это-1
в свой код. :-)randint
(он находится в Lib / random.py) на самом деле просто вызываетrandrange(a, b+1)
!Вы можете написать себе небольшую функцию, чтобы делать то, что вы хотите:
По сути,
10**(digits-1)
дает вам наименьшее {цифра} -значное число и10**digits - 1
дает вам наибольшее {цифра} -значное число (которое оказывается наименьшим {цифра + 1} -значное число минус 1!). Затем мы просто берем случайное целое число из этого диапазона.источник
Мне очень понравился ответ RichieHindle, однако мне понравился вопрос как упражнение. Вот реализация грубой силы с использованием строк :)
источник
Из официальной документации не кажется, что метод sample () подходит для этой цели?
Вывод:
источник
Вы можете создать функцию, которая использует список int, преобразует строку для конкатенации и снова приводит к int, примерно так:
источник