「乱数」のコラム

トップページ>「乱数」のコラム

Pythonと乱数:偶然を操る魔法

プログラミングの世界では、時に「偶然」が必要になります。例えば、サイコロを振るゲーム、ランダムなパスワード生成、データ分析におけるサンプリングなど、その用途は多岐にわたります。Pythonでは、randomモジュールを使うことで、この「偶然」を簡単に、そして効果的に操ることができます。今回は、Pythonにおける乱数について、初心者にもわかりやすく解説します。

乱数とは?

乱数とは、予測不可能な値を指します。しかし、コンピュータは基本的に決定論的な機械なので、真にランダムな数を生成することはできません。そのため、実際には「疑似乱数」と呼ばれるものを使用します。これは、ある初期値(シード)に基づいて、複雑な計算によって生成される数列であり、見た目にはランダムに見えます。

randomモジュールのインポート

Pythonで乱数を使うには、まずrandomモジュールをインポートする必要があります。

import random

これで、randomモジュール内の関数を利用できるようになります。

乱数の生成:基本的な関数

randomモジュールには、様々な乱数を生成するための関数が用意されています。その中でも、よく使われるものをいくつか紹介します。

  • random.random(): 0.0以上1.0未満の浮動小数点数を返します。

    import random
    
    rand_float = random.random()
    print(rand_float) # 例:0.734892...
    
  • random.randint(a, b): a以上b以下の整数を返します(aとbを含む)。

    import random
    
    rand_int = random.randint(1, 10) # 1から10までの整数
    print(rand_int) # 例:5
    
  • random.uniform(a, b): a以上b以下の浮動小数点数を返します。random.random()と似ていますが、範囲を指定できます。

    import random
    
    rand_uniform = random.uniform(1.0, 5.0) # 1.0から5.0までの浮動小数点数
    print(rand_uniform) # 例:3.21876...
    

リストからのランダムな選択

randomモジュールは、リストやタプルなどのシーケンスから要素をランダムに選択する機能も提供します。

  • random.choice(sequence): シーケンス(リスト、タプル、文字列など)からランダムに1つの要素を選択します。

    import random
    
    my_list = ["apple", "banana", "cherry"]
    rand_choice = random.choice(my_list)
    print(rand_choice) # 例:"banana"
    
  • random.sample(population, k): シーケンス(population)から重複なしでk個の要素をランダムに抽出します。

    import random
    
    my_list = ["apple", "banana", "cherry", "date", "fig"]
    rand_sample = random.sample(my_list, 3)
    print(rand_sample) # 例:['cherry', 'date', 'apple']
    
  • random.shuffle(x): リストxの要素をインプレースでシャッフルします(元のリストが変更されます)。

    import random
    
    my_list = ["apple", "banana", "cherry"]
    random.shuffle(my_list)
    print(my_list) # 例:['banana', 'cherry', 'apple']
    

シード値の設定:再現性の確保

randomモジュールは疑似乱数を生成するため、同じシード値を与えると、常に同じ数列が生成されます。これは、デバッグや実験の再現性を確保する上で非常に重要です。

  • random.seed(seed): 乱数生成器のシード値を設定します。

    import random
    
    random.seed(42) # シード値を42に設定
    print(random.random()) # 特定の値が生成される
    
    random.seed(42) # 同じシード値を設定
    print(random.random()) # 上と同じ値が生成される
    

乱数の応用例:サイコロゲーム

簡単な例として、サイコロを振るゲームを作ってみましょう。

import random

def roll_dice():
    """サイコロを振って、1から6までのランダムな目を返す"""
    return random.randint(1, 6)

# サイコロを振る
result = roll_dice()
print("サイコロの目は:", result)

まとめ

Pythonのrandomモジュールは、ゲーム、シミュレーション、データ分析など、様々な分野で役立つ強力なツールです。今回紹介した関数は、そのほんの一部に過ぎません。randomモジュールのドキュメントを参照することで、さらに高度な乱数生成や操作を学ぶことができます。乱数を効果的に活用し、あなたのプログラムに新たな可能性をもたらしましょう。





【mei_13のPython講座】
◯月額4,000円で質問し放題!!
◯完全オンライン
◯翌日までには必ず返信
◯挫折しない独自の学習メソッド
◯圧倒的高評価!!
◯テキストベースで時間を選ばない
詳細はこちら
興味がある方はまず質問だけでもどうぞ!




< Mecab
PyInstaller >







コラム一覧

if文
for文
関数
配列
文字列
正規表現
ファイル入出力
openpyxl
Numpy
Matplotlib
Pandas
scikit-learn
seaborn
beautifulsoup
tkinter
OpenCV
pygame
メイン関数
自作ライブラリ
画像処理
機械学習
スクレイピング
データ分析
グラフ作成
API
可読性
デバッグ
例外処理
コメント
組み込み関数
flask
学び方
ビット演算
マルチスレッドプログラミング
参照渡し
pyenv
エディタ
生成AI
画像認識
Streamlit
lambda式
物理演算シミュレーション
命名規則
遺伝的アルゴリズム
関数型プログラミング
オブジェクト指向
ツリー図
Anaconda
Google Colaboratory
PyTorch
NLTK
音声処理
yt-dlp
組み込み開発
データベース操作
iclawler
PyCaret
pickle
plotly
polars
Mecab
乱数
PyInstaller
MySQL
Pip
sys.argv
データ型
secrets
MediaPipe
YOLO
ソート