[解決済み】大文字と数字を含むランダムな文字列の生成
質問
サイズNの文字列を生成したい。
などの数字と大文字の英字で構成されている必要があります。
- 6U1S75
- 4Z4UKK
- U911K4
で実現するにはどうしたらいいでしょうか? パイソン の方法を教えてください。
どのように解決するのですか?
一行で答えてください。
''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))
あるいは、Python 3.6からであれば、もっと短く
random.choices()
:
''.join(random.choices(string.ascii_uppercase + string.digits, k=N))
暗号化されたより安全なバージョン。 この記事を見る
''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))
詳しくは、さらなる再利用のためのクリーンな機能で。
>>> import string
>>> import random
>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
... return ''.join(random.choice(chars) for _ in range(size))
...
>>> id_generator()
'G5G74W'
>>> id_generator(3, "6793YUIO")
'Y3U'
どのように機能するのですか?
をインポートします。
string
一般的な ASCII 文字のシーケンスを含むモジュールである
random
は、ランダム生成を扱うモジュールである。
string.ascii_uppercase + string.digits
は、大文字のASCII文字と数字を表す文字のリストを連結するだけです。
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.ascii_uppercase + string.digits
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
次に、リスト内包を使って「n」個の要素からなるリストを作成します。
>>> range(4) # range create a list of 'n' numbers
[0, 1, 2, 3]
>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'
['elem', 'elem', 'elem', 'elem']
上記の例では
[
を使用してリストを作成しますが、リスト内の
id_generator
関数を使うので、Pythonはメモリ上にリストを作成せず、その場で一つずつ要素を生成します(詳しくは、この
ここで
).
文字列を 'n' 回作成するように要求する代わりに
elem
では、Pythonに一連の文字から選んだランダムな文字を'n'回作成するよう依頼します。
>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'
したがって
random.choice(chars) for _ in range(size)
のシーケンスを作成しています。
size
の文字が含まれています。の中からランダムに選ばれた文字が
chars
:
>>> [random.choice('abcde') for _ in range(3)]
['a', 'b', 'b']
>>> [random.choice('abcde') for _ in range(3)]
['e', 'b', 'e']
>>> [random.choice('abcde') for _ in range(3)]
['d', 'a', 'c']
そして、空文字列で結合して、シーケンスが文字列になるようにすればよいのです。
>>> ''.join(['a', 'b', 'b'])
'abb'
>>> [random.choice('abcde') for _ in range(3)]
['d', 'c', 'b']
>>> ''.join(random.choice('abcde') for _ in range(3))
'dac'
関連
-
[解決済み] 関数デコレータを作成し、それらを連鎖させるには?
-
[解決済み] C#のStringとstringの違いは何ですか?
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] リストを均等な大きさの塊に分割するには?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 英数字のランダムな文字列を生成する方法
-
[解決済み】大文字・小文字を区別しない「Contains(string)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python Decorator 練習問題
-
パッケージングツールPyinstallerの使用と落とし穴の回避
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】TypeErrorの修正方法。Unicodeオブジェクトは、ハッシュ化する前にエンコードする必要がある?
-
[解決済み】「RuntimeError: dictionary changed size during iteration」エラーを回避する方法とは?
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】numpy: true_divide で無効な値に遭遇
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】TypeErrorを取得しました。エントリを持つ子テーブルの後に親テーブルを追加しようとすると、 __init__() missing 1 required positional argument: 'on_delete'
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない