如何在Python中生成具有特定长度的随机数

假设我需要一个3位数字,所以它会是这样的:

>>> random(3) 563 or >>> random(5) 26748 >> random(2) 56 

要得到一个随机的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 

如果你想要它作为一个string(例如,一个10位数的电话号码),你可以使用这个:

 n = 10 ''.join(["%s" % randint(0, 9) for num in range(0, n)]) 

你可以自己写一些function来做你想做的事情:

 import random def randomDigits(digits): lower = 10**(digits-1) upper = 10**digits - 1 return random.randint(lower, upper) 

基本上, 10**(digits-1)给你最小的{数字}数字, 10**digits - 1给你最大的{数字}数字(恰好是最小的{digit + 1}数字减1!)。 然后我们从这个范围取一个随机整数。

0是否可能是第一个数字? 如果是这样,那么你需要random.randint(0,10**n-1) 。 如果不是, random.randint(10**(n-1),10**n-1) 。 如果零不被允许,那么你必须明确地拒绝数字中有零的数字,或者画出n random.randint(1,9)数字。

另外:有趣的是, randint(a,b)使用某种非pythonic“索引”来得到一个随机数a <= n <= b 。 人们可能会期望它能像range一样工作,并产生一个随机数a <= n < b 。 (注意closures的上部间隔。)

给出在关于randrange的评论中的响应,注意这些可以用更干净的random.randrange(0,10**n)random.randrange(10**(n-1),10**n)random.randrange(1,10)

如果你不想记住所有不同的看似随机的命令(比如我自己),你可以随时使用:

 import random Numbers = range(1, 10) RandomNumber = random.choice(Numbers) print(RandomNumber) #returns a number 

我真的很喜欢RichieHindle的答案,但我喜欢这个问题作为一个练习。 这是一个使用string的暴力实施

 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 

你可以创build一个函数,它使用一个int列表,在string中进行转换来连接并再次执行int操作,如下所示:

 import random def generate_random_number(length): return int(''.join([str(random.randint(0,10)) for _ in range(length)]))