ユーニックス総合研究所

  • home
  • archives
  • python-ransu-hanishitei

Pythonで範囲指定で乱数を得る4つの方法【random】

  • 作成日: 2023-08-09
  • 更新日: 2023-12-24
  • カテゴリ: Python

Pythonで範囲指定で乱数を得る4つの方法

Pythonのrandomモジュールを使って範囲指定で乱数を得るには

  • random.randrange()
  • random.randint()
  • random.uniform()
  • random.triangular()

の4つの関数が使えます。
この記事ではこれらの関数の使い方を解説します。

random.randrange()

randrange()は以下のインターフェースを持ちます。

random.randrange(stop)  
random.randrange(start, stop[, step])  

インターフェースは2つあり、引数の個数で使い分けます。
stopだけを指定した場合は0からstopまでの範囲で乱数を得ます。

startstopを指定した場合はstartstopの範囲で乱数を得ます。
stepを指定した場合はstep刻みの乱数になります。

import random  

print(random.randrange(10))  # 5  

print(random.randrange(0, 10))  # 7  

print(random.randrange(0, 10, 2))  # 8  

random.randint()

randint()は以下のインターフェースを持ちます。

random.randint(a, b)  

この関数はa <= N <= bの範囲で乱数Nを得ます。
たとえば0から10の範囲を指定した場合はその範囲の乱数を得ます。

import random  

for _ in range(10):  
    print(random.randint(0, 10))  

# 2  
# 10  
# 3  
# 7  
# 1  
# 2  
# 9  
# 3  
# 8  
# 1  

random.uniform()

uniformは浮動小数点数の乱数を得ます。
インターフェースは以下になります。

random.uniform(a, b)  

a <= bであればa <= N <= bb < aであればb <= N <= aの乱数を得ます。

import random  

for _ in range(10):  
    print(random.uniform(0, 10))  

# 4.274287966939716  
# 7.605267312473618  
# 9.32622951783877  
# 8.777803395478701  
# 6.08237492473099  
# 6.379581149681539  
# 5.174560518835763  
# 1.933791552816786  
# 7.314910237323594  
# 8.464211820823946  

for _ in range(10):  
    print(random.uniform(10, 0))  

# 6.233158304881506  
# 9.137231552467282  
# 9.443756155109728  
# 0.014941848399045554  
# 2.190029063095304  
# 1.3980222602360453  
# 4.958503198047626  
# 0.08372815781262766  
# 3.8257608711346602  
# 1.1040841059914008  

random.triangular()

triangular()は以下のインターフェースを持ちます。

random.triangular(low, high, mode)  

low <= N <= highの範囲で最頻値modeを持つような乱数Nを返します。

import random  

for _ in range(10):  
    print(random.triangular(0, 10, 5))  

# 3.6495528893649647  
# 7.951678192451139  
# 5.281139960101321  
# 8.072675112575965  
# 6.918927877667826  
# 7.662022025617716  
# 5.692626499606273  
# 4.506161947124113  
# 5.86207542380047  
# 6.460058584929693