はじめに
pythonでランダムな文字列つくりてぇって稀に思うことがあります。例えばパスワードを自動生成したい時、気持ちが高ぶった時、ランダムりたい時など様々だと思います。ランダムを制するものは世界を制すといっても過言です。
ランダム文字列
pythonでランダムな文字列を返すサンプルはたくさん見つけることができます。ググれば一瞬で答えに辿りつくでしょう。
どうもいくつかのページを見ると手順は以下の感じのようです。
①パスワードに利用する文字をリストにぶち込む
②ランダム関数で文字列抽出
③出力!!!
って感じです。
しかしやはり一番信頼度の高いページは公式です。何かする時は公式ページを一度みておくことが正しい気がします。
ランダム関数はこちらを参照しました。
「シーケンス用の関数」を利用すると様々なシーンで活躍しそうです。
文字列の選別
アスキーコードの文字列を配列に格納する方法を利用したり、好きな単語を配列に格納したり用途に合わせて文字列を選別しましょう。今回はアスキーとよく使いそうな記号を選択したいと思います。
テスト仕様
まずはテストでアルファベット大文字小文字のみの10文字固定長パスワード1個生成するものを作りたいと思います。リリース版は使いやすいように文字数と出力個数を自由に設定できるように引数に設定できる仕様にしたいと思います。
ソースはこんな感じ
testRandomString.py
import random
import string
if __name__ == '__main__':
sPopulation = string.ascii_lowercase + string.ascii_uppercase
sRandom = ''.join(random.sample(sPopulation,10))
print(sRandom)
結果。素晴らしい。
リリース版
文字の種類を増やしたり文字数設定、出力個数を設定できる様にしてみます。簡単そうですね。
RandomString.py
import random
import string
def GetRandomString(len,NumberOfOutputs):
if len <= 0:
print('文字列は1文字以上設定してください。Error len <= 0')
return
if NumberOfOutputs <= 0:
print('出力個数は1個以上設定してください。Error NumberOfOutputs <= 0')
return
sPopulation = string.digits+string.ascii_lowercase + string.ascii_uppercase+'!"#$%&()'
for i in range(NumberOfOutputs):
sRandom = ''.join(random.sample(sPopulation,len))
print(sRandom)
return
if __name__ == '__main__':
GetRandomString(0,1)
GetRandomString(1,0)
GetRandomString(10,3)
結果。うん、いい感じです。これはなかなか使えそうです。
感想
なかなか良さげにできましたね。githubにもアップロードしてみました。githubはこちら
連続ブログ更新11日目 文字数1518文字
コメント