Pythonを使ってランダムな数…日本語では乱数を生成する方法を解説します。
乱数については、以下公式サイトが参考になります。
random — 擬似乱数を生成する – python.org
正直なところ、《ランダム》といっても《乱数》といっても同じ意味合いです。
以下《乱数》の簡単な説明です。
乱数とは?
乱数(らんすう)とは、ゲームやアプリで言えば「プレイするたびに違う位置に敵が出現する」とか「問題の選択肢が前回とは違う順番になっている」などの場面で利用されることが多い仕組みです。英語ではランダムという言葉で表現されます。
身近な例だとサイコロです。
サイコロは振ってみるまで1~6のどれが出るか分かりません。こうした不確定要素をプログラミングで表現したい場合、乱数が用いられます。
Pythonで乱数を使うにはrandomライブラリを利用
Pythonで乱数を扱う場合、標準ライブラリの random をインポートします。標準ライブラリなので、pipなどでインストールする必要はありませんが、使う前に
import random
の記述が必要になります。
以下、整数用と実数用とに分けてPythonの乱数生成用メソッドを紹介します。
整数の乱数を返すメソッド
乱数を使ってサイコロを表現する(範囲指定)
Pythonの一番使いやすい乱数メソッドとして最初に randint を紹介します。範囲を指定すると範囲に応じた乱数を整数で返してくれるメソッドです。
題材としてサイコロを表現してみます。実行するたびに1~6のサイコロの目が表示されるスクリプトです。
実行イメージ
3 が出た!
ファイル名: 21_saikoro.py
# サイコロの1~6の目を表示する
import random
saikoro = random.randint(1, 6) # 1~6の乱数を発生させる
print("{} が出た!".format(saikoro) )
解説
整数の範囲を指定して乱数を発生させたい場合、randomモジュールにあるrandintメソッドを使います。
使い方
random.randint( 最小値, 最大値 )
randintは、戻り値として(最小値 ≦ N ≦ 最大値)となる整数Nを返します。
例えば、0~100までの乱数を発生させたければ
n = random.randint( 0, 100 )
のように記述します。
0~N未満の整数を返すrandrange
使い方1
random.randrange( 整数 )
0 ≦ N < 整数 となるランダムな整数Nを返します。
使用例
n = random.randrange( 10 )
この場合、変数nには、0~9の整数が返ります。
サンプル: 22_randrange1.py
# randrangeの使い方1
import random
for i in range(10): # 10回実行
n = random.randrange(10) # 0 1 2 3 4 5 6 7 8 9
print("{} ".format(n), end="" )
実行イメージ
6 8 6 8 0 8 5 4 4 1
使い方2
random.randrange ( 開始, 終了, 増分 )
開始 ≦ N < 終了 となる範囲のランダムな整数Nを返します。ただし、Nは開始から増分ずつ増やして終了未満の数となります。
使用例
n = random.randrange( 50, 110, 10 )
上記の場合、変数nには 50, 60, 70, 80, 90, 100 のいずれかの数が返ります。
サンプル: 23_randrange2.py
# randrangeの使い方2(範囲と増分を指定)
import random
for i in range(10): # 10回実行
n = random.randrange(50, 110, 10) # 50以上110未満の10刻み
print("{} ".format(n), end="" )
実行イメージ
70 50 60 80 100 90 70 60 100 80
実数の乱数を返すメソッド
0.0~1.0未満の実数を乱数で返すrandom
使い方
random()
0.0以上、1.0未満のランダムな実数を返します。
使用例
n = random()
変数nに0.0以上、1.0未満の実数型乱数を返します。
サンプル: 24_random.py
# 0.0~1.0未満の実数を乱数で返す
import random
for i in range(10): # 10回実行
n = random.random()
print("{} ".format(n) )
実行イメージ
0.8029813582526065
0.8605274833313346
0.7666270021423824
0.18516897358468964
0.711218915412957
0.6699556463337403
0.3154352525621624
0.43713449546271155
0.3529250900619245
0.8183681028337124
実数の範囲を指定して乱数を発生させるuniform
使い方
uniform( 最小値, 最大値 )
最小値 ≦ N < 最大値 となるランダムな実数Nを返します。
使用例
n = uniform( 2.5, 5.0 )
変数nに2.5以上、5.0未満のランダムな実数が返ります。
サンプル: 25_uniform.py
# 実数の範囲の乱数を返すuniform
import random
for i in range(10): # 10回実行
n = random.uniform( 2.5, 5.0 ) # 2.5以上5.0未満の実数を返す
print("{} ".format(n) )
実行イメージ
4.503482689250131 4.618524485205028 2.7877169020851187 3.3402919733188123 2.6854739363634854 4.380748221767449 3.421575129870821 4.382229597661421 3.9383290398536763 3.3721430085652795
乱数を使ったスクリプト例
おみくじ
if文と組み合わせておみくじを表現しました。
実行イメージ
大吉
ファイル名: omikuji.py
# おみくじ
import random
# 1~4の乱数を発生させる
omikuji = random.randint(1, 4)
# おみくじ判定
if omikuji == 1:
print("大吉")
elif omikuji == 2:
print("吉")
elif omikuji == 3:
print("末吉")
else:
print("凶")
ドラクエのゴーレム
ドラクエに出てくるゴーレムは、HPが53~70の範囲で出現するそうです。
実行イメージ
ゴーレムが現れた!
HP 66
ファイル名:golem.py
# ドラクエのゴーレム
import random
golem_hp = random.randint(53, 70)
print("ゴーレムが現れた!")
print("HP: {}".format(golem_hp))
コメント