如何生成一个特定位数的随机数?

167 投票
11 回答
304148 浏览
提问于 2025-04-15 21:48

假设我需要一个三位数的数字,那么它可能是这样的:

>>> 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

撰写回答