如何生成一个特定位数的随机数?
假设我需要一个三位数的数字,那么它可能是这样的:
>>> random(3)
563
or
>>> random(5)
26748
>> random(2)
56
11 个回答
28
如果你需要一个三位数,并且想让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)
另外,如果你不想把随机数保存为整数,可以用一行代码来实现:
'{:03}'.format(random.randrange(1, 10**3))
这个一行代码只适用于Python 3.6及以上版本:
f'{random.randrange(1, 10**3):03}'
上面代码的示例输出包括:
- '026'
- '255'
- '512'
如果把它做成一个函数,可以支持任意长度的数字,而不仅仅是三位数:
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_}}'
57
如果你想把它当作一个字符串(比如,一个10位的电话号码),你可以使用这个:
n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])
270
你可以使用 random.randint
或者 random.randrange
这两个方法来生成随机数。比如,如果你想要一个随机的三位数,可以这样做:
from random import randint, randrange
randint(100, 999) # randint is inclusive at both ends
randrange(100, 1000) # randrange is exclusive at the stop
* 假设你真的是想要三位数,而不是“最多三位数”。
如果你想要生成任意位数的随机数,可以这样:
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