Pythonで乱数を扱う方法まとめ【初心者向け解説】

Pythonで乱数を扱う方法や活用例、注意点をわかりやすく解説します。乱数はゲーム開発やデータ分析、シミュレーションなど幅広い分野で活用されており、Pythonの標準ライブラリやNumPyを使えば簡単に生成できます。

Pythonで乱数を生成する基本

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)

乱数のシード(seed)とは?

乱数は毎回異なる値を返しますが、シード値を設定することで乱数の再現性を持たせることができます。テストやデバッグ時に同じ乱数列を得たい場合に便利です。

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での乱数生成

データ分析や機械学習では、**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

まとめ

  • Pythonの乱数はrandomモジュールで簡単に生成可能
  • シード値で再現性を持たせられる
  • ゲームやデータ分析、シミュレーションなど幅広く活用できる
  • 複雑な配列や統計分布の乱数はNumPyが便利
  • セキュリティ用途はsecretsモジュールを使う

Pythonの乱数を使いこなして、プログラミングの幅を広げましょう!

にいやん

出身 : 関西 居住区 : 関西 職業 : 組み込み機器エンジニア (エンジニア歴13年) 年齢 : 38歳(2022年11月現在) 最近 業務の効率化で噂もありPython言語に興味を持ち勉強しています。 そこで学んだことを記事にして皆さんとシェアさせていただければと思いブログをはじめました!! 興味ある記事があれば皆さん見ていってください!! にほんブログ村