随机数有11到20位数

时间:2012-06-14 06:47:32

标签: python random

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

e.g: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位数字。

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分: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之间。不是随机的,因为将第一个数字限制为零以外的某个数字会排除它。

答案 2 :(得分:1)

我会为此选择randrange

    Help on method randrange in module random:

    randrange(self, start, stop=None, step=1, int=<type 'int'>, default=None, maxwidth=9007199254740992L) method of random.Random instance
        Choose a random item from range(start, stop[, step]).

    This fixes the problem with randint() which includes the
    endpoint; in Python this is usually not what you want.
    Do not supply the 'int', 'default', and 'maxwidth' arguments.

所以

random.randrange(1e11, 1e20)

会做你想要的。对于字符串,请使用此

str(random.randrange(1e11, 1e20))