Pythonで整数と小数の乱数を生成するrandomモジュール

この記事では、乱数を作り出す方法を説明します。
整数、小数、正負に対応したサンプルコードをお伝えします。

使うのはrandomモジュールです。

整数の乱数

randrange

randrangeは整数の乱数を返します。

randrange(start, stop, step)start <= N < stop かつ stepの間隔整数Nが返ります。

引数説明
start区間に含まれる。デフォルトは0。
stop区間に含まれない。必須引数。
step返す整数の間隔。デフォルトは1。
print(random.randrange(start=0, stop=100, step=10))
# 20
# start: 区間に含まれる。デフォルトは0。
# stop: 区間に含まれない。必須引数。
# step: デフォルトは1。

print(random.randrange(0, 100, 10))
# 30
# キーワード引数のキーワードは削除可能。

print(random.randrange(100))
# 93
# start=0 stop=100 step=1となる。

print(random.randrange(90, 100))
# 98
# start=90 stop=100 step=1となる。

print(random.randrange(90, 100, 5))
# 95
# start=90 stop=100 step=5となる。

マイナスの整数の乱数も作れます。

print(random.randrange(0, -100, -1))
# -78

print(random.randrange(0, -100, -10))
# -30

randint

randintは整数の乱数を返します。

randint(a, b)a <= N <= b であるランダムな整数Nが返ります。

randint(a, b) は randrange(a, b+1) と同じことです。

print(random.randint(1, 10))
# 9

小数の乱数

random

randomは小数の乱数を返します。

random()0.0 <= N < 1.0 であるランダムな浮動小数点数Nを返します。

print(random.random())
# 0.10788842986144398

uniform

uniform(a, b) で、
a <= b の場合、 a <= N <= b であるランダムな浮動小数点数Nを返します。
b < a の場合、 b <= N <= a であるランダムな浮動小数点数Nを返します。

マイナスの小数の乱数も作れます。

print(random.uniform(0, 10))
# 3.5341585482633118

print(random.uniform(0, -10))
# -8.516104992436924
# マイナスの小数の乱数を作れる。

print(random.uniform(10, 10))
# 10.0
# a=bの場合は、そのまま返る。

ランダムに要素を取り出す

乱数ではないですが、選択肢の中からランダムに要素を取り出すことができます。

choice

choiceは複数の要素からランダムに要素を返します。

サイコロを作るサンプルコードで説明します。

print(random.choice([1, 2, 3, 4, 5, 6]))
# 5
# listからランダムに取り出す。

print(random.choice((1, 2, 3, 4, 5, 6)))
# 3
# タプルからランダムに取り出す。

print(random.choice(range(1, 6+1)))
print(type(range(1, 6+1)))
# 3
# rangeからランダムに取り出す。

print(random.choice('123456'))
# 2
# 文字列から1文字ランダムに取り出す。

sample

sampleは複数の要素から指定された大きさの要素を重複なしで返します。

print(random.sample([1, 2, 3, 4, 5, 6], 2))
# [3, 5]

print(random.sample([1, 2, 3, 4, 5, 6], 5))
# [1, 3, 4, 6, 5]

choices

choicesは複数の要素から指定された大きさの要素を重複ありで返します。

print(random.choices([1, 2, 3, 4, 5, 6], k=2))
# [1, 3]

print(random.choices([1, 2, 3, 4, 5, 6], k=5))
# [4, 5, 1, 1, 6]


print(random.choices([1, 2, 3, 4, 5, 6], [1, 1, 100, 1, 1, 1], k=5))
# [3, 3, 3, 3, 3]
# 重みを付けられる。3が選ばれる確率を上げる。

shuffle

ランダムに要素を返す関数ではないですが、ついでに。

shuffleは複数の要素をシャッフルします。
shuffleの戻り値はNoneです。

l = [1, 2, 3, 4, 5, 6]
random.shuffle(l)
print(l)
random.shuffle(l)
print(l)

# [1, 2, 5, 3, 4, 6]
# [5, 3, 6, 2, 1, 4]


print(random.shuffle(l))
# None
# shuffleの戻り値はNone。

同じ機能で戻り値をlistにしたい場合は、sampleで実現できます。

l = [1, 2, 3, 4, 5, 6]
print(random.sample(l, k=len(l)))
print(random.sample(l, k=len(l)))

# [1, 4, 2, 3, 5, 6]
# [5, 2, 4, 3, 1, 6]