2

如何在python中生成不应该以0开头的随机数(11到20位)?

如:23418915901

def key_more_than_10():
    v=random.randint(11,20)
    char_set = string.digits+string.digits+string.digits
    s= ''.join(random.sample(char_set,v))
    return s

我使用了这段代码,但由于 string.digits(给出 0 到 9 之间的数字)它对我没有帮助吗?

拥有 11 位数字和 20 位数字的可能性应该相等。

4

3 回答 3

4

简单的:

>>> help(random.randint)
Help on method randint in module random:

randint(self, a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.

>>> random.randint(10000000000,99999999999999999999)
35677750742418249489

当然,如果你真的想要一个字符串(不知道为什么会这样),你可以将str()整个东西包裹起来:

>>> str(random.randint(1000000000,99999999999999999999))
'91138793919270489115'
于 2012-06-14T06:51:47.713 回答
2

将您想要的内容直接翻译成代码怎么样:

import random
DIGITS = '0123456789'

ndigits = random.randint(11, 20)
digits = [random.choice(DIGITS[1:])] + [random.choice(DIGITS) for i in xrange(ndigits-1)]
print int(''.join(digits))

几乎随机结果中的位数应均匀分布在 11..20 之间。不是很随机,因为将第一个数字限制为非零会排除它。

于 2012-06-14T09:14:06.300 回答
1

我会为此选择 randrange

    帮助模块 random 中的方法 randrange:

    randrange(self, start, stop=None, step=1, int=<type 'int'>, default=None, maxwidth=9007199254740992L) random.Random 实例的方法
        从范围(开始,停止[,步骤])中选择一个随机项目。

    这解决了 randint() 的问题,其中包括
    端点;在 Python 中,这通常不是您想要的。
    不要提供“int”、“default”和“maxwidth”参数。

所以

random.randrange(1e11, 1e20)

会做你想做的。对于字符串使用这个

str(random.randrange(1e11, 1e20))
于 2012-06-14T07:27:46.853 回答