乱数の利用

こんにちは、児玉です。

maru塾の生徒には高校生もいますので、「情報」の質問を受けることもあります。

そして先日受けた質問が、「プログラムを作る」という課題に関連したもの。
その課題提出のひとつが、「サイコロを振る」でした。

ソースコードを書くコーディングがうまくいかないのか、アルゴリズムで悩んでいるのかというこちらの逆質問に対する回答は、どうやら両方のようでした。

数学が得意な生徒なので、

乱数を発生させ、それをある程度の桁数の整数にし、6で割った余りに1を加えて表示させれば良いのでは?

という提案は即時、理解してくれました。

後は、指定言語の作法(文法)に従って、コーディングするだけ。
その高校の情報の授業では、Physon(パイソン)という言語を使っているようでした。

高級言語(人が読みやすい言語)の中でも、特にPythonはプログラミングを知らない人でも読めるくらい読みやすそうに思えます。
加えてPythonはインタプリタ言語(逐次翻訳型:命令を一つづつ機械語に解釈しながら実行する方式)なので、コンパイル(CPUが理解できる機械語に一括変換)の必要がなく、そのため高校の授業では扱いやすいですからね。

さて、上記のようなヒントを与えて、後は本人に任せたのですが、実は実際にコーディングして提出したプログラムを未だ見ていません。

Pythonの乱数を担っているrandomモジュールには、random.randint(a, b)というのがあって、a以上b以下の整数をランダムに返すらしいのですが、

random.randint(1, 6)

を利用すると、課題担当の先生に叱られる?(笑)

私としては、もう少し桁数の多い整数を乱数発生させ、剰余演算(mod 6)でサイコロを振りたいところですが、おそらくrandom.randint(a, b)の内部では同じようなことをしているのでしょうから、random.randint(1, 6)で十分かと。
いや、ほとんどPythonを使ったことがないので、知らないのですが…。

私が出題者なら、

random.randint(1, 6)はサイコロ足り得るか。
random.randint(1, 6)を1万回実行して検証せよ。

という課題を出しますね。(笑)

そうそう、乱数で思い出しました。
最近、ちょっと疑問に思っていることがあります。

私はAmazon Music Unlimitedをサブスクしていて、車の運転中はよく、「アレクサ *****」とスマホに向かって叫び、*****というアーティストの楽曲をシャッフル再生させているのですが、その最初の曲がだいたい同じなんですよ。
アーカイブにはそのアーティストの楽曲は百曲以上あるはずなのに、どうして、一番最初に流れるのがいつも同じ数曲なのか、甚だ疑問に思っています。

アレクサ、本当にランダムに選んでいる??

どなたか、検証してもらえませんか。

それでは、また。

コメント