シミュレーション、ゲーム開発、あるいはテストデータの作成において、「ランダムな数値(乱数)」が必要になる場面は多々あります。
Pythonには、乱数を生成するための標準ライブラリとして random モジュール が用意されています。これを使えば、0から1の間の小数や、指定した範囲の整数など、様々な形式の乱数を簡単に生成できます。
この記事では、random モジュールの主要な3つの関数と、それらを使って乱数のリストを作成する方法について解説します。
主要な乱数生成関数一覧
random モジュールで頻繁に使用される関数をまとめました。
| 関数名 | 処理内容 | 戻り値の型 |
random.random() | 0.0 以上 1.0 未満のランダムな浮動小数点数を生成します。 | float |
random.uniform(a, b) | a 以上 b 以下(※)の範囲でランダムな浮動小数点数を生成します。 | float |
random.randint(a, b) | a 以上 b 以下の範囲でランダムな整数を生成します。 | int |
※ uniform の上限 b は、浮動小数点の丸め誤差により含まれる場合と含まれない場合があります。
各関数の具体的な使い方
1. 0.0〜1.0未満の乱数: random.random()
最も基本的な関数です。確率の判定(例:30%の確率で成功させる)などによく使用されます。
import random
# 0.0 <= x < 1.0 の乱数を生成
prob = random.random()
print(f"生成された値: {prob}")
# 30% の確率で当たりと判定する例
if prob < 0.3:
print("結果: 当たり!")
else:
print("結果: ハズレ")
実行結果(例):
生成された値: 0.284391...
結果: 当たり!
2. 指定範囲の小数: random.uniform(a, b)
特定の範囲内で小数の乱数が必要な場合に使用します。例えば、センサーの測定誤差や、物理的なパラメータの変動をシミュレーションする際に便利です。
import random
# 36.0度 〜 37.5度 の範囲で体温をシミュレーション
body_temp = random.uniform(36.0, 37.5)
# 小数点第2位まで表示
print(f"測定体温: {body_temp:.2f}度")
実行結果(例):
測定体温: 36.84度
3. 指定範囲の整数: random.randint(a, b)
サイコロやルーレットのように、特定の範囲の整数が必要な場合に使用します。指定した開始値と終了値の両方を含む点に注意してください。
import random
# 1 から 6 までのサイコロを振る
dice_roll = random.randint(1, 6)
print(f"サイコロの目: {dice_roll}")
実行結果(例):
サイコロの目: 4
応用:乱数のリストを生成する
リスト内包表記と組み合わせることで、複数の乱数を格納したリストを効率的に作成できます。
例:テストデータの生成
0から100までのスコアをランダムに5人分生成する例です。
import random
# 0〜100の整数乱数を5回生成してリストにする
# '_' はループ変数を「使用しない」ことを明示する慣習
scores = [random.randint(0, 100) for _ in range(5)]
print(f"生成されたスコアリスト: {scores}")
実行結果(例):
生成されたスコアリスト: [78, 45, 92, 10, 66]
まとめ
random.random(): 0.0〜1.0未満の基準となる乱数。random.uniform(a, b): 指定範囲の小数(シミュレーションなどに)。random.randint(a, b): 指定範囲の整数(サイコロやID生成などに)。
用途に合わせて適切な関数を選択することで、意図通りのランダムな挙動を実装できます。
