Python サンプル集 |
Visual Basic 中学校 > Python サンプル集 > 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よりは遅い。 | ○ | |
みんなは使ってる? | △ | 多分あまり有名な方法じゃないと思うし、 ちょっと面倒なので 特に必要な人だけ使っていると思う。 |
○ | 多分昔からあるやり方なので 基本的にみんなこれを使っていると思う。 |