如何在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位数字。
答案 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))