Answers:
要获得一个随机的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(["{}".format(randint(0, 9)) for num in range(0, n)])
如果您需要一个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+只有oneliner:
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_}}'
0是否算作可能的第一位数字?如果是这样,那么您需要random.randint(0,10**n-1)
。如果没有,random.randint(10**(n-1),10**n-1)
。如果永远不允许使用零,那么您将必须明确拒绝其中包含零的n
random.randint(1,9)
数字,或者绘制数字。
另外:有趣的是,randint(a,b)
使用了一些非Python的“索引”来获取随机数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中)的Python代码实际上只是在调用randrange(a, b+1)
!
您可以创建一个使用int列表,将字符串转换为连接并再次转换为int的函数,如下所示:
import random
def generate_random_number(length):
return int(''.join([str(random.randint(0,10)) for _ in range(length)]))