[解決!Python]randomモジュールで乱数を取り扱うには解決!Python

randomモジュールで定義されているrandint関数/randrange関数/random関数/uniform関数を使用して乱数を生成したり、乱数列を生成したりする方法を紹介する。

» 2022年09月06日 05時00分 公開
[かわさきしんじDeep Insider編集部]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「解決!Python」のインデックス

連載目次

import random
from random import randint, randrange, random, uniform

# 整数乱数の取得
num = randint(0, 5)  # 05の範囲の整数値をランダムに取得
print(num)  # 2など

num = randrange(6)  # 05の範囲の整数値をランダムに取得
print(num)  # 4など

num = randrange(10, 21)  # 1020の範囲の整数値をランダムに取得
print(num)  # 15など

num = randrange(0, 11, 2)  # 010の範囲の偶数をランダムに取得
print(num)  # 10など

# 実数乱数(浮動小数点数)
num = random()  # 0.01.0の範囲の実装値をランダムに取得
print(num)  # 0.3291879801592166など

num = uniform(0.5, 1.6)  # 0.51.6の範囲の実数値をランダムに取得
print(num)  # 1.389340380844763など

# 乱数列の作成
int_list = [randint(0, 10) for _ in range(10)]
print(int_list)  # [1, 9, 6, 0, 0, 1, 3, 3, 8, 9]など

float_list = [uniform(0, 10) for _ in range(10)]
print(float_list)
# 出力例:
#[0.26535969683863625, 1.988376506866485, 6.498844377795232, 5.449414806032166,
# 2.204406220406967, 5.892656838759088, 8.094304566778266, 0.06498759678061017,
# 8.05819251832808, 6.981393949882269]



randomモジュール

 Pythonに標準で付属するrandomモジュールを使うと、整数や浮動点小数の乱数を生成したり、リストからランダムに要素を抽出したりできる。本稿ではrandomモジュールが提供する以下の関数を使って整数と浮動点小数の乱数を生成する方法やリスト内包表記を使って乱数列を作成する方法を紹介する。

  • 整数乱数の生成:randint関数/randrange関数
  • 浮動点小数乱数の生成:random関数/uniform関数

 なお上記の関数は実際にはrandomモジュールで定義されているRandomクラスのインスタンスメソッドとなっていて、randomモジュール内部でRandomクラスのインスタンスを生成した上で、各メソッドに別名を付け、それらを関数として使えるようにエクスポートしている。

整数乱数の生成

 整数乱数を生成するにはrandint関数とrandrange関数が使える。前者は生成する値の範囲を指定するもので、後者はrange関数と同様な引数を取る。

random.randint(a, b)
random.randrange(start, stop=None[, step])


 randint関数は戻り値をnとしたときに、a <= n <= bの範囲に含まれる整数値をランダムで返す。bに指定した境界値が戻り値の範囲に含まれるというのは通常のPythonの流儀とは異なる。これに対して、randrange関数ではrange関数と同様、stopに指定した値は戻り値の範囲には含まれない。つまり、start <= n < stopの範囲に含まれる整数値がランダムに返される。stepの解釈も同様となる。start > stopとなる値も指定できるが(例:randrange(10, 0, -1)など)、通常はそのような呼び出し方はしないだろう。

 以下にrandint関数の使用例を示す。

import random
from random import randint, randrange

num = randint(0, 5# 0〜5の範囲の整数値をランダムに取得
print(num)  # 2など


 この例では0〜5の範囲の整数値をランダムに取得している。上で述べた通り、randint関数では第2引数(b)に指定した値が戻り値の範囲に含まれる点に注意。

 以下はrandrange関数の一番簡単な使用例だ。

num = randrange(6# 0〜5の範囲の整数値をランダムに取得
print(num)  # 4など


 引数を1つだけ指定した場合、この関数は0から「第1引数に指定した値−1」の範囲に含まれる整数値をランダムに返送する。この例では、第1引数に6を指定しているので、実際には0〜5の範囲に含まれる整数値が返される。

 引数を2つ指定した場合は「第1引数に指定した値」〜「第2引数に指定した値−1」の範囲に含まれる整数値がランダムに返送される。以下に例を示す。

num = randrange(10, 21# 10〜20の範囲の整数値をランダムに取得
print(num)  # 15など


 このときには、start > stopとなるような指定をすると例外が発生する。

 引数を3つ指定した場合の振る舞いは、range(start, stop, step)で指定した整数列の要素からランダムで取り出すものと考えられる。以下に例を示す。

num = randrange(0, 11, 2# 0〜10の範囲の偶数をランダムに取得
print(num)  # 10など


 なお、randrange関数に1.2や'1'など、整数値と等しくない値を指定すると例外が発生する。

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。