Pythonで乱数を扱う方法や活用例、注意点をわかりやすく解説します。乱数はゲーム開発やデータ分析、シミュレーションなど幅広い分野で活用されており、Pythonの標準ライブラリやNumPyを使えば簡単に生成できます。
Pythonの乱数生成は主にrandom
モジュールを利用します。
import random
でモジュールを読み込む必要があります。関数名 | 内容・使い方例 |
---|---|
random.random() | 0.0以上1.0未満のランダムなfloatを生成 |
random.randint(a, b) | a以上b以下のランダムな整数を生成(両端含む) |
random.uniform(a, b) | a以上b以下のランダムなfloatを生成 |
random.choice(seq) | シーケンスからランダムに1つ選択 |
random.shuffle(seq) | シーケンスの要素をランダムに並び替え |
サンプルコード:
import random
print(random.random()) # 0.0以上1.0未満の小数
print(random.randint(1, 10)) # 1~10の整数
print(random.uniform(1.0, 5.0)) # 1.0~5.0の小数
items = ['apple', 'banana', 'cherry']
print(random.choice(items)) # リストから1つ選ぶ
random.shuffle(items) # リストをシャッフル
print(items)
乱数は毎回異なる値を返しますが、シード値を設定することで乱数の再現性を持たせることができます。テストやデバッグ時に同じ乱数列を得たい場合に便利です。
import random
random.seed(314)
print(random.random()) # 何度実行しても同じ値
乱数を使った簡単なゲーム例として「数字当てゲーム」があります。1~100の乱数を生成し、ユーザーが当てるまで繰り返します。
import random
def number_guessing_game():
target_number = random.randint(1, 100)
attempts = 0
print("1から100の間の数字を当ててください。")
while True:
guess = int(input("数字を入力してください: "))
attempts += 1
if guess < target_number:
print("もっと大きい数字です。")
elif guess > target_number:
print("もっと小さい数字です。")
else:
print(f"正解です!{attempts}回で当たりました。")
break
number_guessing_game()
標準のrandom
モジュールでは、一様分布だけでなく正規分布やガウス分布など様々な分布の乱数も生成可能です。
random.gauss(mu, sigma)
:平均mu、標準偏差sigmaのガウス分布random.normalvariate(mu, sigma)
:正規分布random.betavariate(a, b)
:ベータ分布random.expovariate(lambd)
:指数分布データ分析や機械学習では、**NumPyの乱数生成機能(np.random)**がよく使われます。
np.random.random((行, 列))
:0以上1未満の乱数配列np.random.randint(最小, 最大, (行, 列))
:整数の乱数配列np.random.seed(シード値)
:シード設定で再現性確保import numpy as np
np.random.seed(10)
print(np.random.random((2,2))) # 2x2の乱数配列
randomモジュールはセキュリティ目的には不適切です。パスワード生成や暗号用途にはsecrets
モジュールを使いましょう1。
random
モジュールで簡単に生成可能secrets
モジュールを使うPythonの乱数を使いこなして、プログラミングの幅を広げましょう!