2017-11-09 11 views
0

大文字と小文字、数字と記号を含むランダムな文字列を印刷しようとしています。これは私のコードです:ランダムな文字列で印刷する特定のシンボルを選択する

genpassword = ''.join([random.choice(string.ascii_letters 
            + string.digits 
            + string.punctuation) 
         for n in range(12)]) 

これまでのところ動作します。

symbols = ["!","$","%","^","&","*","(",")","-","_","=","+"] 

string.punctuation版画、これらすべてのシンボルが、いくつかの他:しかし、私は唯一のプログラムは以下の通り特定の記号を、印刷したいです。

私のプログラムは、上記のシンボルのシンボルのみを含む文字列を生成するにはどうすればよいですか?

+0

'random.choice(string.ascii_letters + string.digits + '' .join(シンボル))' –

+0

PM2Ring @私は彼らから、だと思います再作成する新しいPy3.6 'secrets'モジュールと比較して、' random'モジュールは安全なオプションではないかもしれません。 –

+1

@Chris_Rands良い点。 OTOHでは、これが「おもちゃ」プログラムかどうか、またはOPが実際のパスワードを生成するためにOPを使用する予定かどうかはわかりません。 FWIWでは、セキュリティの向上にほとんど効果がないので、記号を気にしませんが、パスワードには英数字以外の記号がいくつか含まれていることが多くのサイトで主張されています。 –

答えて

1

あなたは文字列に変換したいすべての文字を入れ、その後、代わりにstring.punctuationのものを使用することができます。

symbols = "!$%^&*()-_=+" 
genpassword = ''.join([random.choice(string.ascii_letters + string.digits + symbols) for n in range(12)]) 

これは、例えばstring.ascii_lettersが同じくらいの文字列である、あなたのコードはすでにどのように動作するか、実際にありますよく、Pythonインタプリタ(実験するための良い方法)で参照してください。

>>> import string 
>>> string.ascii_letters 
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' 
関連する問題