【Python入門】乱数を使いこなせるようになろう



【Python入門】乱数を使いこなせるようになろう

プログラミングでゲーム開発を考えている方必見の「乱数」。
人間の予測不可能なレベルで任意の数値を出してくれる「乱数」は、機械学習やブロックチェーンなどの分野でも活用中。
Pythonの可能性を広げたいあなた、「乱数」の知識、ちょっと深めてみませんか?

目次
  1. 【Python入門】乱数を使いこなせるようになろう
  2. 乱数とは
  3. 乱数が使われている事例
  4. Pythonでの乱数(random)基本操作
  5. 自分だけのランダム関数
  6. まとめ

【Python入門】乱数を使いこなせるようになろう

乱数とは

image

乱数(Random:ランダム)とは、任意の数字を出力したり、任意の数字を取り出したりして扱う数字(数値)のことです。

ロールプレイング・ゲームの攻撃値や出現するモンスターの種類、テトリスの次のアイテムなどゲームをイメージすると「ランダム機能」分かりやすいかもしれません。予測できないことを表現したい、抽出する時に使うんですね。

数値計算が得意なコンピュータ(プログラム処理)にとって「乱数」は必然的な機能。そのため Python に限らず、Java や Ruby、PHP など多くのプログラミング言語で「乱数」は使われています。

各言語によって乱数の使い方は違いますが、Pythonの場合はこんな感じ。

import random
random.random()

Jupyter Notebook やインタラクティブ・シェルなどに入力して「乱数」体験してみて下さい。

実行結果

image

プログラミング経験者なら「乱数、別に大したことないな」と思われた方もいらっしゃるのでは? 乱数、単にランダムな数値を出力するだけなら確かに大したことないかもしれませんが、それを応用して機械学習や合意メカニズム(ブロックチェーン)に役立てられているとすればどうでしょうか?ちょっと乱数に興味がわきませんか?

乱数の今時の使用事例についてもう少し詳しく見ていきましょう。

乱数が使われている事例

image

機械学習に

データを元に決まった演算処理を行い、結果の整合性を確かめる機械学習。計算式に入れるデータをランダムに取り出したりする処理に、乱数が使われますね。中でも「決定木」というアルゴリズム処理の際に、よく乱数が使われています。

ご興味ある方は、以下のページをご参照下さい。

ゲームに

ブロックチェーンに

いかがでしょうか? random を使うと色々なことが楽しめちゃうんですね。

次は、基本的な random() の使い方を確認してみます。

Pythonでの乱数(random)基本操作

image

Pythonで使う random は、Pythonに標準搭載されているため、すぐにランダムできます。

import random
random.random()

<< 実行結果 >> image

import randomでランダム・モジュールを読み込み、random.random() で乱数を出力。この random.random() の最初の randomrandom モジュールを表して、あとの random() は randomモジュール内にある関数 random() を意味します。randomモジュール内の関数は、random() 関数以外に 23 種類ありますね。いくつかの関数をご紹介。


【randomモジュール内の randint() 関数の場合】

randint(a, b) 関数は、a から b の範囲内の数値をランダムに出力します。

import random
random.randint(1,10)

実行結果 image


【randomモジュール内の choice() 関数の場合】

choice(a) 関数は、リスト a 内の任意の要素を出力。

import random
items = ['もも', 'ぶどう', 'すいか', 'りんご', 'なし']
random.choice(items)

実行結果 image


【randomモジュール内の sample() 関数の場合】

先ほどの choice() は、リスト内の一つの値のみの抽出でしたが、 sample() は抽出数を指定可能。

import random
items = ['もも', 'ぶどう', 'すいか', 'りんご', 'なし']
random.sample(items, 2)

実行結果 image


上記では「乱数」といえどもサンプルのため、ひとつだけの結果出力でした。「これ本当に乱数になってるの?」と思う方もいらっしゃいますよね。 そんな時はループ機能を使うと乱数具合が確認できます。

ランダム結果をたくさん出力(10回)

import random
for x in range(10):
    print(random.randint(1,100))

実行結果 image

自分だけのランダム関数

image

ここまで乱数を使ってくると、「乱数具合を自分で決めたい」という方も。大丈夫です、自分で乱数関数作れます。参考アルゴリズムは、Linear congruential generatorです。

def r(seed=[0], m=2**32, a=1664525, c=1013904223):
    seed[0] = (a*seed[0] + c) % m
    return seed[0]

for x in range(10):
    print(r())

実行結果

image

まとめ

実際に乱数のコードを実行してみると、結果がいつも違うのでおもしろいですよね。ゲーム以外にもおみくじや当番決めなど日常生活の色々な場面で使えそう。乱数の基本概念を理解して、機械学習や人工知能習得に少しでも役立てたいですね。

乱数や関数、モジュール以前に「Python コードの実行方法が分からない」、「import random って何?」という方、一度 Pythonの基礎学習を検討されてみませんか?オンライン × マンツーマンの CodeCamp なら効率よくPythonの基礎を習得できると思いますよ。

オシママサラ
この記事を書いた人
オシママサラ
\ 無料体験開催中!/自分のペースで確実に習得!
オンライン・プログラミングレッスンNo.1のCodeCamp