【Pythonコラム】Pythonと乱数:偶然を操る魔法




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モジュールのドキュメントを参照することで、さらに高度な乱数生成や操作を学ぶことができます。乱数を効果的に活用し、あなたのプログラムに新たな可能性をもたらしましょう。



< Mecab
コラム一覧に戻る
PyInstaller >

レッスン概要

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