Ad

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

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

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

他の言語にもよくある、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 Edit

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

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 Edit

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 Edit

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

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

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

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


Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 219, today: 2, yesterday: 2
Princeps date: 2019-04-03 (Wed) 21:48:39
Last-modified: 2019-04-03 (Wed) 21:53:49 (JST) (247d) by njf
広告

ログイン

ユーザー名:


パスワード:





パスワード紛失


NJF