お困りの方へ
この記事では、乱数を作り出す方法を説明します。
整数、小数、正負に対応したサンプルコードをお伝えします。
使うのは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]