ヘッダー
Python サンプル集
 

ランダムな数値を生成する

2022/11/20

→ C# のサンプルに切り替える → Visual Basic のサンプルに切り替える

 

5 以上 80 以下のランダムな整数を高精度・低速で生成する

import secrets

minValue = 5
maxValue = 80
number = secrets.randbelow(maxValue- minValue + 1) + minValue

print(number)

メモ:私のパソコンでは100万回の実行で約5.4秒かかりました。通常の用途では十分な速度と思います。→ 参考:secrets と random の比較

 

 

5 以上 80 以下のランダムな整数を低精度・高速で生成する

import random

number = random.randint(5, 80)
print(number)

メモ:低精度といっても通常の使用には十分な精度です。→ 参考:secrets と random の比較

 

 

ランダムな小数を高精度・低速で生成する

この例はfloatの範囲内でランダムな小数を生成します。

import secrets
import binascii
import struct

binBytes = binascii.unhexlify(secrets.token_hex(8))
number = struct.unpack("d", binBytes)[0]

print(number) #たとえば、-3.906623378434364e-124 と出力されます。

メモ:私のパソコンでは100万回の実行で約4.2秒かかりました。通常の用途では十分な速度と思います。→ 参考:secrets と random の比較

 

 

0.0 以上 1.0 未満のランダムな小数を低精度・高速で生成する

import random

number = random.random()
print(number) #たとえば、0.03333320227240011 と出力されます。

メモ:低精度といっても通常の使用には十分な精度です。→ 参考:secrets と random の比較

メモ:整数を生成する randint関数と異なり、random関数では値の範囲指定はできません。

 

 

6.6 以上 11.3 未満のランダムな小数を低精度・高速で生成する

import random

min = 6.6
max = 11.3

rawNumber = random.random()
number = rawNumber * (max - min) + min;

print(number) #たとえば、8.225526161306949 と出力されます。

メモ:低精度といっても通常の使用には十分な精度です。→ 参考:secrets と random の比較

 

 

参考:secrets と random の比較

方法 secrets random
アドバイス   セキュリティ系の処理はこっち使いましょう。   セキュリティ以外は基本的にこっちを使いましょう。
どういう処理が得意? セキュリティ関連の処理。
たとえば、ランダムなパスワードの生成。
(セキュリティに関連しない)
ゲームや、Webアプリケーション、科学的な計算など
生成する値は予測可能?  困難 可能な場合がある
セキュリティ大丈夫?  OK! × 推奨されていない
プログラムのしやすさ 整数はちょっと扱いにくい。
小数はもうちょっと扱いにくい。
整数はOK。
小数はちょっと扱いにくい。
速い? randomよりは遅い。  
みんなは使ってる? 多分あまり有名な方法じゃないと思うし、
ちょっと面倒なので
特に必要な人だけ使っていると思う。
多分昔からあるやり方なので
基本的にみんなこれを使っていると思う。