Pythonの「random」で、予測不能な面白さをプログラムに!

投稿者: | 2026-01-23

プログラミングの世界に足を踏み入れた皆さん、こんにちは! いつも私の技術ブログを読んでくださり、ありがとうございます。今回のテーマは、Pythonの標準ライブラリであるrandomです。皆さんのプログラムに「予測不可能性」というスパイスを加えたいと思ったことはありませんか? ゲームでキャラクターの動きをランダムにしたり、シミュレーションで偶然性を表現したり、あるいは単純にジャンケンゲームを作ったり……。randomライブラリは、そんな願いを手軽に、そして強力にサポートしてくれる心強い味方です。

randomライブラリを使うと、まるで魔法みたいにプログラムに動きが出ますよね!

概要

Pythonのrandomライブラリは、その名の通り「乱数」を生成するための機能を提供します。乱数と聞くと難しく感じるかもしれませんが、要は「規則性がなく、予測できない数値」のこと。例えば、サイコロを振って出る目のように、次に何が出るか分からない数をコンピューターに作ってもらうイメージです。

このライブラリはPythonに標準で搭載されているため、別途インストールする手間なくすぐに使い始めることができます。生成される乱数は厳密には「擬似乱数」と呼ばれ、完全に予測不能な真の乱数とは異なりますが、多くの一般的な用途には十分すぎるほどの品質を持っています。

メリット

randomライブラリを使うメリットはたくさんあります。

  • 手軽さ: Pythonの標準ライブラリなので、import randomと記述するだけで準備完了です。特別な設定や外部ライブラリのインストールは一切不要です。
  • 多様な機能: 0.0から1.0までの浮動小数点数、特定の範囲内の整数、リストやタプルなどのシーケンスからの要素の選択、シーケンスのシャッフルなど、多岐にわたる乱数生成メソッドが用意されています。
  • 活用範囲の広さ:
    • ゲーム開発: 敵キャラクターのランダムな出現、クリティカルヒットの判定、カードゲームでのシャッフルなど。
    • シミュレーション: 物理現象や社会現象のモデリング、モンテカルロ法など。
    • データサイエンス: サンプリング、データセットの分割など。
    • その他: パスワードの自動生成(ただしセキュリティ要件が高い場合はsecretsモジュール推奨)、抽選プログラムなど。
  • 再現性: 必要に応じて「シード」を設定することで、同じ乱数列を再現できるため、プログラムのデバッグやテストにも役立ちます。

サンプルコード

それでは、実際にrandomライブラリの主要な関数を使ってみましょう。

import random

# 1. 0.0以上1.0未満の浮動小数点数を生成
# 例: 0.123456789...
print(f"random.random(): {random.random()}")

# 2. 指定範囲の整数を生成 (a <= N <= b)
# 例: 1から6までの整数(サイコロの目)
print(f"random.randint(1, 6): {random.randint(1, 6)}")

# 3. リストやタプルなどのシーケンスからランダムに1つの要素を選択
choices = ["大吉", "中吉", "小吉", "末吉", "凶"]
print(f"random.choice(['大吉', '中吉', '小吉', '末吉', '凶']): {random.choice(choices)}")

# 4. シーケンスの要素をランダムにシャッフル (元のリストが変更されます)
cards = ["A", "K", "Q", "J", "10"]
random.shuffle(cards)
print(f"random.shuffle(['A', 'K', 'Q', 'J', '10']): {cards}")

# 5. シーケンスから重複なしで指定個数の要素を選択
# 例: 1から100までの数字から5つをランダムに選ぶ
numbers = list(range(1, 101))
selected_numbers = random.sample(numbers, 5)
print(f"random.sample(range(1, 101), 5): {selected_numbers}")

# 6. シードを設定して乱数の再現性を確認
print("\n--- シード設定の例 ---")
random.seed(42) # 特定の整数をシードとして設定
print(f"random.seed(42)後の random.random(): {random.random()}")
random.seed(42) # もう一度同じシードを設定すると、同じ乱数列が始まる
print(f"random.seed(42)後の random.random(): {random.random()}")

色々な乱数の生成方法があるんですね!これで私ももっと面白いプログラムが作れそうです♪

みーちゃんのワンポイント

randomライブラリはとても便利ですが、生成されるのは「擬似乱数」であるということを覚えておきましょう。また、パスワード生成などセキュリティが特に重要な場面では、randomではなくsecretsライブラリの利用を強くおすすめします。