2

最初に0で始まらない(11から20桁)を持つPythonで乱数を生成する方法は?

例: 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()全体を a で囲むことができます。

>>> 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 に答える