如何生成具有特定位数的随机数?

2025-03-05 09:14:00
admin
原创
98
摘要:问题描述:假设我需要一个 3 位数字,那么它应该是这样的:>>> random(3) 563 or >>> random(5) 26748 >> random(2) 56 解决方案 1:您可以使用 或random.randint。random.randran...

问题描述:

假设我需要一个 3 位数字,那么它应该是这样的:

>>> random(3)
563

or

>>> random(5)
26748
>> random(2)
56

解决方案 1:

您可以使用 或random.randintrandom.randrange因此,要获得一个随机的 3 位数字:

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

解决方案 2:

如果您希望将其作为字符串(例如,10 位电话号码),则可以使用此方法:

n = 10
''.join(["{}".format(randint(0, 9)) for num in range(0, n)])

解决方案 3:

如果您需要一个 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,您可以将其作为一行代码执行:

'{:03}'.format(random.randrange(1, 10**3))

python 3.6+ 仅限一行:

f'{random.randrange(1, 10**3):03}'

上述输出的示例为:

  • ‘026’

  • ‘255’

  • ‘512’

实现为可以支持任意长度的数字(不仅仅是 3)的函数:

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_}}'

解决方案 4:

你可以编写一个小函数来完成你想做的事情:

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

基本上,10**(digits-1)为您提供最小的 {digit} 位数字,并10**digits - 1为您提供最大的 {digit} 位数字(恰好是最小的 {digit+1} 位数字减 1!)。然后我们从该范围内随机取一个整数。

解决方案 5:

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

解决方案 6:

该解决方案不包括 0 作为起始整数。

import random

fixed_digits = 6 

print(random.randrange(111111, 999999, fixed_digits))

out:
271533

如果 0 作为起始整数对您来说并不重要,那么您可以使用 000001 或 100000 作为起始范围。

解决方案 7:

我认为最好的选择是使用这个

from string import digits
import random

verify_code = ''.join(random.choice(digits) for i in range(6))

解决方案 8:

您可以创建一个函数,该函数使用一个 int 列表,将其转换为字符串以进行连接,然后再次强制转换 int,如下所示:

import random

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

解决方案 9:

我真的很喜欢 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)

解决方案 10:

从官方文档来看,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

解决方案 11:

我知道这是一个老问题,但多年来我看到过很多解决方案。这是我对创建一个默认为 6 的 n 位数字随机字符串的函数的建议。

from random import randint

def OTP(n=6):
    n = 1 if n< 1 else n
    return randint(int("1"*n), int("9"*n))

当然,您可以将“1”*n 更改为您想要的开始值。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用