実際にプログラムを書いてみよう 〜その2〜
予想できない乱数
何度かこのプログラムを実際に走らせて遊んだ(?)方は気がついたかもしれませんが、このゲームは再起動すると同じ答えを繰り返してしまいます
私がまだ中学生だった頃、友人のBASICマニアが競馬ゲームを雑誌から入力して遊んでいたところ同じ問題に出くわしました 毎回そのゲームを起動すると、必ず前回と同じ結果になるので、記憶力が邪魔をして遊べないと
この問題は、関数計算機の同機能にまで及ぶようで少なくとも、乱数に規則性のないものを求める方法が公にされていませんでした プログラムというのは数学の方程式と同等のものなので、同じ記述の計算式が違う結果を算出するということ自体が不自然なのです
Pythonでは、random.seed() を使うことによって、新しい乱数配列に移行し前回とは違う乱数のセットを作ることはできます しかし、この方法をいかに発展させても完全に予測不可能な乱数を得ることはできません
社会人になってから出会った隠れた天才の友人が、時刻関数を使う方法を教えてくれました
import time
n = time.time() // 時刻を数値で表したもの
n = n - int(n) // 数値の整数部分を引いたもの
print(n)
こんな簡単な方法があったとは! しかも、乱数の関数を使わないとは・・・ 友人の短いコメントでは、非常に短い時間に繰り返し使うと数が偏ってしまう そういうときは数列を右から読み直すとより完璧になるそうです
この方法は計算機のような時間関数が設定できないものでは使えません その場合、どのようにして完全な乱数を得るかということが、バックギャモンのようなゲームを作成する上で重要になると思います
Comments
Post a Comment