どの言語を使っていても遭遇するのが乱数の生成。
ビジネスロジック以外でも、シナリオテストや負荷試験のロジックを書く機会が増えてから使う場面も増えました。
今回は Python で特定の範囲の整数の乱数を取得する方法を紹介します。
負荷テストは以前紹介した Locust を想定しているので、興味があればこちらの記事もご覧ください。

randomモジュール
Python で乱数を扱うには、標準で用意されている random モジュールを利用します。
この random モジュールには便利なメソッドがたくさん用意されています。
今回は、この中から randrange() を使って目的を果たしたいと思います。
randrange()
randrange() は引数の数によって使い方が異なります。
random.randrange(stop)
random.randrange(start, stop[, step])
特定の範囲からランダムな値を取得したい場合は、開始と終了の値を引数として渡せば良さそうですね。
ここで気をつけておきたいのは、終了の値は含まれないということです。
これは range() と同じイメージで考えておけば問題ありません。
では早速、randrange() を使ってみます。
1 2 3 4 5 | $ vi ransu.py import random for i in range(10): ransu = random.randrange(1, 10) print("ransu: " + str(ransu)) |
これを実行すると以下のような結果が出力されます。
(1から9の中からランダムに値を取得します)
1 2 3 4 5 6 7 8 9 10 11 | $ python ransu.py ransu: 7 ransu: 6 ransu: 3 ransu: 5 ransu: 9 ransu: 6 ransu: 9 ransu: 2 ransu: 6 ransu: 9 |
10 までの数値が欲しい場合は random.randrange(1, 11) とすれば問題ありません。
ちなみに、引数が 1 つの randrange() を使う場合、引数は公式リファレンスの通り stop を想定しているので「0」から「引数 – 1」の中から乱数が取得されます。
1 2 3 | for i in range(10): ransu = random.randrange(10) print("ransu: " + str(ransu)) |
上記の場合は、以下のように 0 から 9 の中からランダムな数値が取得される結果となります。
1 2 3 4 5 6 7 8 9 10 | ransu: 4 ransu: 3 ransu: 4 ransu: 7 ransu: 8 ransu: 6 ransu: 8 ransu: 6 ransu: 9 ransu: 0 |
乱数を生成して配列のインデックス指定をする際には最適ですが、1 から 10 の値が欲しい場合は引数を randrange(1, 11) のように変えるか、乱数生成後にプラス 1 するといいでしょう。
乱数を特定の桁数でゼロ埋めする
乱数の結果を、特定の桁数で前ゼロで埋めた形(ゼロパディング)にしたい場合も多いと思います。
例えば、こんなやつですね。
12345
01234
00001
Python でこれを実現するには format() を利用します。
1 2 3 4 | import random for i in range(10): ransu = '{0:07d}'.format(random.randrange(1, 10000000)) print("ransu: " + str(ransu)) |
先ほどのように実際に実行してみます。
1 2 3 4 5 6 7 8 9 10 | ransu: 8598154 ransu: 0804765 ransu: 7087883 ransu: 3034293 ransu: 2214504 ransu: 6372104 ransu: 4083219 ransu: 5718105 ransu: 0350552 ransu: 5020088 |
PHPの場合
PHP だと以下のように書いたのと同じですね。
1 | echo sprintf("%07d", mt_rand(1, 9999999)); |
Kotlinの場合
Kotlin だと以下のように書いたのと同じですね。
1 2 3 4 | import java.util.Random val rand = Random() val randNum = rand.nextInt(9999999) + 1 println("randNum: %07d".format(randNum)) |
Kotlin の format() については過去にまとめたので興味があれば以下もご覧ください。

JavaScriptの場合
JavaScript 版を調べる機会があったので下記にまとめてみました。
