Pythonでランダムな文字列をつくるには?
こんばんはAliceです。
今日紹介するはなしは、「ぼくなり」のやりかたでランダムな文字列を生成する方法を書きます。
方法
まず、ランダムな文字列を構成する文字を設定していきます。これで文字のリストが作れました。
>>> str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz123456789[]{}!$%&'()-^\:;*+><"
>>> strlist = list(str)
そして、このリストの長さ分のランダム要素をつくります。
randint関数は、上の例でいうと0からlen(strlist)-1までの数の中からランダムで一つの整数を選んでくれます。
>>> import random
>>> x = random.randint(0,len(strlist)-1)
ちなみに、なぜlen(strlist)-1なのかというと、リストの要素は1から始まるのではなく0から数えるからです。
なので、len(strlist)だけでは、1文字多くなってしまうのです。
その後は、上のrandintでだした整数xを、リストの要素として出力します。
こうすることによって、リストにある文字をランダムで出力することができます。
>>> print strlist[x]
なぜなら、生成したランダム整数xは、必ずstrlistの長さ以内の数であるからです。
あとは、生成する文字列を何文字にするか決めて、
forループで文字列変数を生成すればOKです。
このように、ランダムな文字列が生成できました。
>>> string = ""
>>> for i in range(20):
... x = random.randint(0,len(strlist)-1)
... string += strlist[x]
...
>>> print string
JL&[MGPl6;ap4W!mwuY5
あとはこれを関数にして呼び出せば、いつでもランダムな文字列を生成することができます。
関数にするとき、文字数を引数で設定すれば、より便利になります。
関数を作ったコードをgistに掲載しました。
https://gist.github.com/751654
以上、Aliceでした!
追伸
今回のコード、実は文字列をリストにしなくてもできると思います。pythonには文字列にもインデックスがつくので、それをリスト替わりにすればもっと行数は少なくなるかもしれません。