2016-05-20 31 views
1

09826843-5112-8345-7619-372151470268qcRtAhieRabnpUaQのようなものを得るには、15文字の文字列と一緒にランダムな32桁の数字を生成する必要があります。ランダムなモジュールで大文字と小文字を区別しない文字列を生成する方法

import random 

"-".join(['%08d' % random.randrange(0, 10e7), 
      '%04d' % random.randrange(0, 10e3), 
      '%04d' % random.randrange(0, 10e3), 
      '%04d' % random.randrange(0, 10e3), 
      '%012d' % random.randrange(0, 10e11)]) 

だけrandomモジュールで大文字小文字を区別しない15文字の文字列を作成するには、同様の方法があります:私は、番号を生成するためのコードを、次のことでしょうか?

答えて

1
import random 

rand_cap = [chr(random.randint(65, 90)) for i in range(7)] 
rand_small = [chr(random.randint(97, 122)) for i in range(7)] 
rand_chars_list = rand_cap + rand_small 

random.shuffle(rand_chars_list) 

rand_chars = ''.join(rand_chars_list) 
+0

この解決策は、置換( 'shuffle')なしでランダム描画を行います。置き換え(' sample')で行うべきです。あなたが質問をチェックすると、例のランダムな文字列に2つの 'a'があることがわかります。あなたの方法ではこれを作ることはできません。 – wildwilhelm

+0

@wildwilhelm私は上記の方法で 'uEladCFBEatFgA'(2 'a's)を生成しました。この例のランダムな文字列に2つの 'a'があるとどういう意味ですか?あなたのメソッドはこれを生成できません。 –

+0

私はそれについて間違っている、十分に密接に読まなかった。 – wildwilhelm

3
import random 
import string 
''.join(random.sample(string.ascii_letters, 15)) 

import uuid 
str(uuid.uuid4()) 
+0

注https://docs.python.org/2/library/random.html#random.sampleには置き換えがありません。したがって、最初のアプローチでは、2つ以上の似たような数字の文字列を生成することはできません。 –

3
import numpy as np 
import random 
import string 


def random_string(num_chars, symbols):  
    return "".join(random.choice(symbols) 
        for _ in range(num_chars)) 


def random_string2(num_chars, symbols, replace=True): 
    """Random string with replacement option""" 
    symbols = np.asarray(list(symbols)) 
    return "".join(np.random.choice(symbols, num_chars, replace)) 

def main(): 
    print(random_string(15, string.ascii_letters)) 
    print(random_string2(15, string.ascii_letters, False)) 
    print(random_string2(15, string.ascii_letters, True)) 


if __name__ == "__main__": 
    main() 

列の要素は一意である必要はない( "qcRtAhieRabnpUaQが" 2 'A' を有しているので、私はケースのように推定します)。

要素を一意にするには、@ Sergey Gornostaevのソリューションがおそらく最もエレガントですが、ascii_lettersに固有の要素の数を生成できる最長の文字列として指定します。

関連する問題