Python:
乱数の生成
どのようにして:
Pythonは、さまざまな用途のための乱数を生成するのに役立つrandom
モジュールを提供しています。以下の方法で始めることができます:
モジュールのインポート
import random
ランダムな整数の生成 任意の二つの数の間で。
random_integer = random.randint(1, 10) print(random_integer)
サンプル出力:
7
浮動小数点数の生成 0と1の間で。
random_float = random.random() print(random_float)
サンプル出力:
0.436432634653
異なる範囲で浮動小数点数が必要な場合、乗算します:
random_float_range = random.random() * 5 # 0から5まで print(random_float_range)
サンプル出力:
3.182093745
リストからランダムな要素を選択する
greetings = ['Hello', 'Hi', 'Hey', 'Hola', 'Bonjour'] print(random.choice(greetings))
サンプル出力:
Hola
リストをシャッフルする カードゲームや順序をランダム化する必要があるあらゆるアプリケーションに最適です。
numbers = list(range(10)) random.shuffle(numbers) print(numbers)
サンプル出力:
[2, 5, 0, 4, 9, 8, 1, 7, 6, 3]
詳細な解説
Pythonのrandom
モジュールは擬似乱数生成器(PRNG)を使用しており、具体的にはメルセンヌ・ツイスタアルゴリズムを使用しています。これは一般的なアプリケーションには適していますが、十分な出力を観測することで予測可能であるため、暗号学的な目的には不向きです。Python 3.6で導入されたsecrets
モジュールは、セキュリティに敏感なアプリケーションで暗号学的に強固な乱数を生成するためのより良い代替手段を提供します。例えば、パスワードリセットリンクのための安全なランダムトークンを生成する場合:
import secrets
token = secrets.token_hex(16)
print(token)
歴史的に、真にランダムな数を生成することは、物理現象や手動で入力されたシードに依存する初期の方法を含め、コンピューティングにおいて挑戦でした。メルセンヌ・ツイスタ(少なくとも2023年の私の最後の知識更新時点でPythonのrandom
モジュールでデフォルトで使用されている)のようなアルゴリズムの開発と採用は、顕著な進歩を示しました。しかし、より安全で効率的なアルゴリズムを求める継続的な探求は、暗号関連のタスクのためにsecrets
モジュールを含むに至りました。この進化は、ソフトウェア開発におけるセキュリティの重要性の高まりと、暗号化から安全なトークン生成に至るまでのアプリケーションにおけるより強固な乱数の必要性を反映しています。