今回はPythonでランダムな数値を生成できる関数ランダム関数について解説していきます。ランダムな数値を生成する関数はnumpyとか他のライブラリに入っていたりしますがここで解説するのは標準ライブラリの一つのradom関数について説明します。
random関数について
random関数とはランダムな数値を生成することができる関数です。例えば、最初実行したときには4という数字を得られたが、次実行したときには9という数字が得られた、みたいな感じです。
サイコロのプログラムを作るときなんかには1~6という数字がランダムに得られるように設定してあげて、実装するような形で使用することができます。
random関数の書き方
それではrandom関数の書き方について確認します。random関数はライブラリですので、まず最初にライブラリをインポートして使用できるようにしてあげる必要があります。
1 |
import random |
インポートって何ぞやという方は別記事にてご紹介する予定ですが、今はチュートリアルを参照して確認してください。インポートしたライブラリ、モジュールといいますが、これを利用して関数にアクセスします。
では実際にランダム関数を用いて数値を生成してみます。
1 2 3 4 5 |
import random randomnum = random.random() print(randomnum) |
最初にimport 、 2行目にランダム関数でランダムな数値を生成し、最後に出力しています。
randomモジュール
上記を実行してみると分ると思いますが、得られる数値は小数点何桁かを含んだ0以上1未満の数値になっています。AIのバイアスとかで使用する分にはよいかもしれませんが、これだと不便ですよね。なので、ユーザーの目的に沿った数値が得られるような関数がそのほかに用意されておりますのでそちらも確認していきます。
randint関数 ~特定の範囲の整数を生成~
ランダムな整数を生成する関数としてrandint関数があります。randint関数は引数が2で、1つ目の引数が開始値、2つ目の引数で終了値を指定します。
random.randint(開始値,終了値)
なお、リストのスライスとは違って終了値は含みますので注意です。例えばrandom.randint(1,3)と指定すれば1~3の値を生成します。
1 2 3 4 5 |
import random randomint = random.randint(0,3) print(randomint) |
uniform関数 ~特定の範囲の小数点を含んだ数値を生成~
ランダムな浮動小数点の値を生成する関数はuniform関数になります。randint関数と同様に引数に開始値と終了値を指定します。
random.uniform(開始値,終了値)
以下のコードは上記のrandint関数の呼び出しをuniform関数に変えただけですが生成される値が浮動小数点になっていることを確認してみてください
1 2 3 4 5 |
import random randomint = random.randint(0,3) print(randomint) |
choice関数 ~シーケンス型のデータからランダムに値を取得~
choice関数は上記の2の関数とは毛色が違ってデータを生成するのではなくランダムにデータを取得する関数となっております。例えば3つの要素があるリストからはインデックスを指定して取得する必要がありますが、choice関数を用いればインデックス番号123のいずれかの要素を指定なくランダムに取得できます。記載方法はインデックスにシーケンス型のデータを指定してあげるだけです。
random.choice(シーケンス型のデータ)
1 2 3 4 5 6 7 8 9 10 |
import random numlist = [10,100,1000] text = "hello" #数値リストを取得 print(random.choice(numlist)) #1文字ランダムに取得 print(random.choice(text)) |
シーケンス型のデータなのでリストだけでなく文字列にも利用できます。
shuffle関数 ~リスト型のデータの中身をシャッフルする~
リスト型のデータに対して操作する関数としてshuffle関数があります。この関数はその名の通りデータの中の順序をシャッフルします。例えばインデックス番号1のところに入っていた要素が3番目のインデックスになったりします。シーケンス型のデータとしていないのは文字列やタプルがイミュータブル、つまり変更不可なデータ型なので、データの並びを変えるshuffle関数は使用することができずエラーとなりますのでご注意ください。書き方は以下のようになります。
random.shuffle(リスト型のデータ)
1 2 3 4 5 6 |
import random numlist = [10,100,1000] random.shuffle(numlist) print(numlist) |
sample関数 ~シャッフルされた新しいリストを生成~
shuffle関数と似た関数にsample関数というものがあります。sample関数は同じくシーケンス型の順序を入れ替えるものですが、この関数は元のデータ型に対して操作を行うのではなく新しいリストを作成して、そこに順序を入れ替えた値を代入するような動きになっております。そのため、文字列やタプルについても処理を行うことができます。ただし、生成される値がリストのため、元のデータ型とは異なります。
書き方は以下のようになります。1つ目の引数にシーケンス型のデータを、2つ目に要素のうち何個の要素を取得するか指定します。
random.sample(シーケンス型のデータ,生成するデータの要素数)
1 2 3 4 5 6 7 8 9 10 11 |
import random #数値リストに対して numlist = [10,100,1000] random.shuffle(numlist) #文字列に対して text = "hello" textlist = random.sample(text,3) print(textlist) |
seed関数 ~生成する乱数の値を固定~
seed関数はseed値を指定することによってランダムな値を固定させることができます。seed値とは何ぞやという方は調べてもらえればわかると思いますが、ランダムな値を生成するための元の値なので、その値が固定化されれば同じランダム値が得られます。書き方は以下のようになります。
random.seed(任意の数)
random.randint()
上記ではrandintとしていますが、uniform関数や、shuffle関数など、いずれの関数でも使えます。
1 2 3 4 5 6 7 8 9 10 |
import random random.seed(5) randomnum = random.randint(0,5) numlist = [10,100,1000] print(randomnum) print(random.choice(numlist)) |
固定化されているのでseed(4)を指定した場合は数値が4、リストは100が選択されます。
いかがでしたでしょうか。
使い方がわからない等ございましたらお気軽にご連絡ください。
ここまで読んでいただきありがとうございます。
お疲れ様でした。
コメント