Back to page

− Links

 Print 

Python​/乱数 :: NJF Wiki

xpwiki:Python/乱数

Pythonで疑似乱数を生成するには、randomモジュールを使います。

ただし、このモジュールの多くの乱数はプログラムの状態などから予想可能です。 セキュリティや暗号に使うなら他にsecretsというモジュールを使って下さい。

Table of contents
  • 0以上1未満の乱数
  • リストなどからランダムに要素を取り出す
  • a以上b以下のランダムな整数
  • 乱数のseed(種)を指定する
  • まとめ

0以上1未満の乱数 anchor.png[1] Edit [2]

他の言語にもよくある、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にはこれ以外にもいろいろ便利なメソッドが用意されているので、用途があうならそちらを使いましょう。

Page Top

リストなどからランダムに要素を取り出す anchor.png[3] Edit [4]

リストなどからランダムに要素を取り出すには、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
Page Top

a以上b以下のランダムな整数 anchor.png[5] Edit [6]

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

両端の値は含まれます。

Page Top

乱数のseed(種)を指定する anchor.png[7] Edit [8]

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が自動で設定されます。

Page Top

まとめ anchor.png[9] Edit [10]

これ以外にも多くの便利なメソッドがrandomモジュールにはあります。

このうち、Python​/リストをランダムに並べ替える[11]についてはこちらで紹介しています。

長くなるので、こちらではよく使いそうな物だけ紹介しました。

他の物もページを分けてそのうち紹介するつもりです。


Last-modified: 2019-04-03 (Wed) 21:53:49 (JST) (605d) by njf