9 ответов:
чтобы получить случайное 3-значное число:
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-значный номер телефона) вы можете использовать это:
n = 10 ''.join(["%s" % randint(0, 9) for num in range(0, n)])
0 считается возможной первой цифрой? Если это так, то вам нужно
random.randint(0,10**n-1). Если нет, тоrandom.randint(10**(n-1),10**n-1). А если ноль-это никогда разрешено, тогда вам придется явно отклонять числа с нулем в них или рисоватьnrandom.randint(1,9)цифры.в сторону: интересно, что
randint(a,b)использует несколько non-обновления "индексация", чтобы получить случайное числоa <= n <= b. Можно было бы ожидать, что он будет работать какrange, и произвести случайное числоa <= n < b. (Обратите внимание на закрытый верхний интервал.)даны ответы в комментариях о
randrangeобратите внимание, что они могут быть заменены пылесосrandom.randrange(0,10**n),random.randrange(10**(n-1),10**n)иrandom.randrange(1,10).
вы могли бы написать себе маленькую функцию, чтобы делать то, что вы хотите:
import random def randomDigits(digits): lower = 10**(digits-1) upper = 10**digits - 1 return random.randint(lower, upper)по сути,
10**(digits-1)дает вам наименьшее {цифра} - число цифр, и10**digits - 1дает вам самый большой {цифра} - номер цифры (который, оказывается, самый маленький {цифра+1}-номер цифры минус 1!). Тогда мы просто берем случайное число из этого диапазона.
Если вы не хотите запоминать все различные, казалось бы, случайные команды (как я), вы всегда можете использовать:
import random Numbers = range(1, 10) RandomNumber = random.choice(Numbers) print(RandomNumber) #returns a number
Если вам нужен 3-значный номер и вы хотите, чтобы 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)альтернативно, если вы не хотите сохранять случайное число как int, вы можете просто сделать это как oneliner:
'{:03}'.format(random.randrange(1, 10**3))python 3.6+ только одна строка:
f'{random.randrange(1, 10**3):03}'пример выходных данных выше являются:
- '026'
- '255'
- '512'
Мне очень понравился ответ RichieHindle, однако мне понравился вопрос как упражнение. Вот реализация грубой силы с использованием строк:)
import random first = random.randint(1,9) first = str(first) n = 5 nrs = [str(random.randrange(10)) for i in range(n-1)] for i in range(len(nrs)) : first += str(nrs[i]) print str(first)
С официальная документация, не кажется ли, что метод sample() подходит для этой цели?
import random def random_digits(n): num = range(0, 10) lst = random.sample(num, n) print str(lst).strip('[]')выход:
>>>random_digits(5) 2, 5, 1, 0, 4
вы можете создать функцию, которая использует список int, преобразуется в строку для объединения и приведения do int снова, что-то вроде этого:
import random def generate_random_number(length): return int(''.join([str(random.randint(0,10)) for _ in range(length)]))
Comments