|
1: 2019-04-03 (水) 21:48:39 njf |
| + | Pythonで疑似乱数を生成するには、randomモジュールを使います。 |
| | | |
| + | ただし、このモジュールの多くの乱数はプログラムの状態などから予想可能です。 |
| + | セキュリティや暗号に使うなら他にsecretsというモジュールを使って下さい。 |
| + | |
| + | *0以上1未満の乱数 [#lde6c507] |
| + | |
| + | 他の言語にもよくある、0以上1未満の乱数を生成するにはrandomメソッドを使います。 |
| + | |
| + | |
| + | import random |
| + | |
| + | for i in range(10): |
| + | print(" %d : %f" % (i, random.random())) |
| + | |
| + | 結果 |
| + | 0 : 0.270474 |
| + | 1 : 0.359992 |
| + | 2 : 0.429213 |
| + | 3 : 0.657160 |
| + | 4 : 0.902497 |
| + | 5 : 0.932992 |
| + | 6 : 0.607276 |
| + | 7 : 0.884832 |
| + | 8 : 0.544661 |
| + | 9 : 0.948175 |
| + | |
| + | これを使って工夫すればよく使う大抵の乱数を必要とするプログラムは書けますが、Pythonにはこれ以外にもいろいろ便利なメソッドが用意されています。 |
| + | |
| + | |
| + | *リストなどからランダムに要素を取り出す [#a0f98b65] |
| + | |
| + | リストなどからランダムに要素を取り出すには、choiceメソッドを使います。 |
| + | |
| + | testList = ["one","two","three","four"] |
| + | |
| + | for i in range(10): |
| + | print(" %d : %s" % (i, random.choice(testList))) |
| + | |
| + | 結果 |
| + | 0 : four |
| + | 1 : two |
| + | 2 : three |
| + | 3 : four |
| + | 4 : four |
| + | 5 : two |
| + | 6 : two |
| + | 7 : one |
| + | 8 : one |
| + | 9 : one |
| + | |
| + | *a以上b以下のランダムな整数 [#p88b7ff1] |
| + | |
| + | a以上b以下のランダムな整数を得るにはrandint(a,b)を使います。 |
| + | |
| + | for i in range(10): |
| + | print(" %d : %d" % (i, random.randint(5,20))) |
| + | 結果 |
| + | |
| + | 0 : 7 |
| + | 1 : 14 |
| + | 2 : 9 |
| + | 3 : 18 |
| + | 4 : 19 |
| + | 5 : 11 |
| + | 6 : 10 |
| + | 7 : 5 |
| + | 8 : 20 |
| + | 9 : 18 |
| + | |
| + | 両端の値は含まれます。 |
| + | |
| + | |
| + | *乱数のseed(種)を指定する [#sfb995c1] |
| + | |
| + | seedメソッドを使うと乱数のseed(種)を指定できます。 |
| + | |
| + | 同じseedを指定すると、何度実行しても同じ結果が得られます。 |
| + | |
| + | import random |
| + | |
| + | random.seed(1) |
| + | |
| + | for i in range(10): |
| + | print(" %d : %f" % (i, random.random())) |
| + | |
| + | 結果 |
| + | 0 : 0.134364 |
| + | 1 : 0.847434 |
| + | 2 : 0.763775 |
| + | 3 : 0.255069 |
| + | 4 : 0.495435 |
| + | 5 : 0.449491 |
| + | 6 : 0.651593 |
| + | 7 : 0.788723 |
| + | 8 : 0.093860 |
| + | 9 : 0.028347 |
| + | |
| + | この結果は何度実行しても同じになります。 |
| + | |
| + | これは、例えば乱数を含むプログラムをテストするために、前回のプログラムの実行結果と比較したいときや、複数の環境で実行結果をあわせたいときなどに使えます。 |
| + | |
| + | seedを指定しないと、その時の時刻やOSの提供している乱数などでseedが自動で設定されます。 |
| + | |
| + | *まとめ [#xbade676] |
| + | |
| + | これ以外にも多くの便利なメソッドがrandomモジュールにはあります。 |
| + | |
| + | このうち、[[Python/リストをランダムに並べ替える]]についてはこちらで紹介しています。 |
| + | |
| + | 長くなるので、こちらではよく使いそうな物だけ紹介しました。 |
| + | |
| + | 他の物もページを分けてそのうち紹介するつもりです。 |