Pythonのrandomを使って乱数を使いこなそう

19/02/11 17:42:51     19/02/11 18:29:14

pythonのrandomモジュール

randomモジュールはPythonのモジュールのなかでも使用される頻度の高いものです。ランダム処理を行う際にはだいたい登場すると言っても過言ではないものです。

このページではrandomモジュールの基礎からやや応用まで紹介しますが、乱数の使い方を把握しておくとPythonだけでなく他の言語でも応用が利きます。

とはいえそれほど難しい概念でもないので、ざっと読んで把握しておき、詳細なコードは改めて実装する際に見て書くなりコピペするなりすると良いかと思います。

randomモジュールの基本的な使い方

randomモジュールを使用するには、まずインポートします。具体的には以下のコードです。

import random

これだけです。これだけなので以降のサンプルコードではインポート部分を省略して紹介する部分もありますが、randomモジュールを使用する際には必ずインポートします。

1以下のfoloat型乱数を取得する方法

Pythonのrandomモジュールのなかの関数はいくつか種類がありますが、最初に紹介するrandom.random関数は1以下の数値を返すようになっています。そのため、デフォルトではfloat型の値を返します。サンプルコードは以下です。

num = random.random()
print(num)

このコードを実行すると、コンソールには0.0~1.0の数値が出力されます。

指定範囲の乱数を出力する

次に、範囲指定で乱数を取得する方法を紹介します。上の例ではrandom.random関数を紹介しましたが、次に紹介するrandom.uniform関数は、任意の範囲で値を指定することが可能です。

またrandom.random関数とrandom.uniform関数の大きな違いとしては、random.uniform関数はfloat型で1以上の値も指定できるということです。サンプルコードは以下です。

num = random.uniform(1.0,6.0)
print(num)

上記のコードを実行すると、1.0<=x<=6.0の範囲でランダムな値を返します。直感的にわかりやすいのですが、random.uniform関数は第一引数が最小値となっており、第二引数が最大値になっています。

指定範囲で整数値の乱数取得

次に、小数ではなく整数で乱数の範囲指定を行います。使用する関数はrandom.randint関数です。整数なので型はintで、サンプルコードは以下になります。

num = random.randint(1,10)
print(num)

上記のコードでは1~10の整数を指定しており、その間の値がランダムで取得されます。引数については先ほどと同様に、第一引数最小値、第二引数が最大値となっています。

配列の中身をランダムに取得する

今までの例では数値をランダムに取得してきましたが、randomモジュールで取得できるのは数値だけではありません。配列を用意しておけば、そこからランダムに要素を取得することが可能です。

使用する関数はrandom.choice関数で、サンプルコードは以下のようになります。

sampleArray = ["January", "February", "March", "April", "May", "June", “July”, “August”, “September”, “October”, “November”, “December”]
print(random.choice(sampleArray))

上記のソースコードを実行すると、配列のなかからいずれかの月を取得することが可能です。

配列の中身をシャッフルする

上の例では配列の中身を取得しましたが、中身をランダムにシャッフルすることも可能です。関数としては、random.shuffle関数を使用します。サンプルコードは以下です。

sampleArray = ["January", "February", "March", "April", "May", "June", “July”, “August”, “September”, “October”, “November”, “December”]
random.shuffle(sampleArray)
print(sampleArray)

上記のソースコードを実行すると、配列の中身がランダムに入れ替わって出力されます。

randomモジュールの応用的な使い方

次に、randomモジュールの応用的な使い方について紹介します。基本的には上で紹介した内容を知っておけばひとまず問題ありませんが、これから紹介する応用的な内容も頭の片隅にいれておけば役立つかもしれません。

とはいえきっちり覚えておく必要はないので、ざっくり把握しておいて、またおいおい必要になったら調べるようにすれば問題ありません。

文字列をランダムに取得する

数値取得や配列について見てきましたが、文字列をランダムに取得することも可能です。ただしrandomモジュールとは別にモジュールが必要で、具体的にはstringモジュールが必要になります。サンプルコードは以下です。

import string
chars = string.ascii_letters + string.digits
print(chars)
print(random.choice(chars))

まず一つ目の出力では、以下のように出力されます。

‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789’

stringモジュールのstring.ascii_letters関数はアルファベットの大文字と小文字をすべて抽出する関数で、string.digits関数は0から9までの数字を抽出するモジュールです。これらの関数を+でつなぐことで、両方を取得しました。

そして最後に取得した文字列に対して、random.choice関数を使用してランダムに取得しています。このコードでは1文字だけを抽出しましたが、複数の文字を抽出することも可能です。

ただし少し難しいので、よくわからない場合はスルーで問題ないかと思います。

n = 6
s = ''
sampleStr = s.join([random.choice(chars) for i in range(n)])

このコードでは、6文字を取得しています。ループで回しながら文字列結合していくコードです。そこまで利用頻度は高くないかと思いますが、このような使い方もできる、と頭の片隅に置いておくと良いかもしれませんね。

まとめ

以上、randomモジュールの各関数の使用方法について紹介してきました。基本的に関数の使用は簡単で、また関数名も直感的に内容がわかるような単語ばかりだったかと思います。コード自体をきっちり覚える必要性はまったくないのですが、どのようなコードで何ができるのかは把握しておいた方が良いでしょう。

randomモジュールの関数は他にもありますが、詳しくはネット検索か、エディタや総合開発環境の入力補完などで見ることができます。補完機能によってはrandom.の段階で関数の一覧が表示され、カーソルを当てると関数の内容を表示してくれるようなものもあります。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する