Python:ランダムな数を生成させる

Python

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))

コメント

タイトルとURLをコピーしました