相生コンピュータークラブ第1期(2026年1月)~乱数とドリル~
2026年になりました。相生コンピュータークラブも2年目に突入します。
1年間さまざまなテーマに取り組んできました。先に進むだけでなく、半歩戻りながら、基礎を固めていきます。途中から参加するメンバーにもとっつきやすいように工夫しながら進めていきます。

Contents
タイピング練習とアルゴロジック
タイピング練習とアルゴロジックは、今年も変わらず取り組みます。タイピングはパソコン操作の基本、アルゴロジックはプログラミング思考の基本です。
まずは正しく続けること。行き詰まったら、正しく考えることです。週2回でも半年もすれば成果がでます。あせらず、じっくり取り組むことが大切です。
この基本コースだけのプランも用意していますので、いきなりプログラミングは難しそう~と思う方はこちらをどうぞ。12月から新しいメンバーが増えています。
ところで、思わぬところからタイピングで私のスコアを超えるメンバーがでました。ちなみに私のスコアは、日本語入力で220字/分くらいで、オフィスワーカーだとかなり速い部類です。つまり、私のスコアを超えたということは、一般的なオフィスワーカーを凌駕したタイピング能力があるということです。
この快挙、クラブ全体で二人目です。3年経たないくらいで私を超えていきました。素晴らしい!
生成AIがこれだけ幅を利かせて来ている中で、タイピングが速いことに価値があるのかと思われる方もいらっしゃるかもしれません。生成AIの使い方をサポートすることも多々ある中で、はっきりと断言できます。「タイピングをまともにできないと生成AIの使い方も下手」です。
音声入力もできるし、一見関係なさそうです。しかし、タイピングと生成AI利用の上手下手には、はっきりとした関係があります。それは、タイピングができると、ロジックを持った文章で生成AIに伝えられるからです。
生成AIから適切な回答を導こうとすると、生成AIが理解しやすいロジカルな文章で指示する必要があります。これは、生成AIの原理上変わりません。タイピングが速い人は、ロジカルな文章を頭で考えるとともに思考の速度で入力できます。タイピングが遅い人は、ロジカルな文章を考えたとしても、入力がボトルネックになって手抜きをします。そこで差が生まれます。
また、音声入力がかなり優秀だとしても、修正する場面は多々あります。結局手入力が必要で、ボトルネックになるのです。また、話し言葉と、書き言葉は違います。自分の話し言葉を録音して聞いてみるとよくわかりますが、まったくロジカルではありません。つまり、話し言葉は生成AIから適切な回答を得るには向いていないのです。
生成AIがLLM(大規模言語モデル)である以上、これは紛れもない事実です。将来的に改善することは考えられますが、その間に生成AI活用力で差がつくだろうと予測します。生成AIを使いこなしたかったら、まずタイピングです!
乱数とは何か
年始めの本編は、乱数の復習から。乱数とは、「ランダム(デタラメ)な数字」のことです。
ちょっと考えてみましょう。乱数を使うと何が嬉しいのでしょうか? 何に役立つのでしょうか?
乱数が使われる場面・要素は、例えば以下のようなものです。
ゲームで敵の動きが分かっていたら、それは全然面白くないでしょう。トランプで遊ぶにしたって、何が配られるかわからないから楽しいです。
また、現実世界には物理法則だけでは説明できない予測不能な要素がたくさんあります。これを乱数で置き換えることによって、より現実感が増します。
Pythonで乱数を使うには、以下のとおりです。1~10のうち、ランダムに表示するプログラムです。
import random
print(random.randint(1, 10))たったこれだけで、乱数が使えるなんて大変便利です。
Scratchとの対比
ロジックを意識してもらいたいとの思いから、同じプログラムをScratchで併記してみました。

Scratchでプログラムをやってみて、Pythonでもやってみる。同じことを実現しているので、類似点があるはず。そこに気づいてほしいのです。
モンテカルロ法で円周率を求める
小学5年生の算数で習うのが円周率です。メンバーに聞いてみると、「3.14」という答えがすぐに返ってきました。では、「なぜ3.14なの? ほんとに3.14なの?」と聞くと、みんな黙ってしまいます。

円周率を厳密に求めることはできますが、ここではプログラムでモンテカルロ法を使ってざっくりと円周率を求めてみましょう。
モンテカルロ法はrandom関数を使って確率的に解を導く方法です。社会の色んな場所で使われているらしいです。金融とか、保険とか。とても簡単で、コメントを抜いたらわずか10行です。
import random # ランダムな数字を使うための道具箱
# 1. 何回ダーツを投げるか決めます(多いほど正確になります)
total_points = 1000
# 2. 扇形の中に入った数を数えるための変数を0にします
inside_circle = 0
# 3. 決めた回数だけくりかえします
for i in range(total_points):
# 0から1の間のランダムな数を2つ作ります(これが点の場所 xとy です)
x = random.random()
y = random.random()
# 4. 点が扇形の中に入っているかチェックします
# (x×x + y×y が 1以下なら、中に入っています)
if x*x + y*y <= 1:
inside_circle = inside_circle + 1
# 5. 円周率を計算します
# 公式: 4 × (中に入った数 ÷ 全体の数)
pi = 4 * inside_circle / total_points
# 結果を表示します
print("計算した円周率は: " + str(pi))
total_pointsを大きくするとだんだん精度が上がります。だいたい3.14になることを確認します。
重要なのは、毎回同じ答えになるわけではないことと、厳密な解ではないということです。確率的に解を導いている以上、仕方のないことですね。ちなみに生成AIも確率的に文章を作っています。つまり、答えにブレがあります。
小学生の段階で、内容を厳密に理解する必要はありません。「モンテカルロ法ってプログラムでやったことがあるな~」と思い出せる程度で十分です。
Scratchでもやってみる
Pythonで書いたコードを、今度はScratchでも作ってみます。


Pythonで書いたコードが構造的にどのようになっているのかを、Scratchで感じてほしいと思います。ですが、Scratchはめんどくさいのです。コードで書くのになれると、同じことを実現するのにもScratchはとても大変です。
小学生のメンバーからも、Scratchが面倒だと声が上がっていました。シメシメと思います。Scratchは、あくまで教育用言語です。発展がありません。実用は、Pythonです。
ドリルをScratch+Pythonで
年末に取り組んでいたPythonドリルを、Scratch併記で取り組みます。これも考え方は同じで、ScratchとPythonの類似点を意識しつつ深めてほしいとの思いです。
コードが書けることよりも、プログラムの構造やロジックを考えることのほうが重要です。複数の言語を行き来することで、それを意識してほしいのです。

動作テストの重要性
偶数・奇数の判定プログラムを作っていたメンバー
「この数字でOKだから……もう一つ数字を入れてみよう。……こっちの数字でもOK。できた……」
そばで見ていて、素晴らしいなあと思いました。「なんで2回数字を入れたの?」と聞くと、「前に1回だけ試してだめな時があったから」とは、経験が見事に生かされています。
私たちでも動作テストは、面倒なのでついついサボりがちです。で、サボった分岐ルートでバグがあって、デスマーチ突入なんてよくある失敗談です。
分岐を使ったときの動作テストにはコツがあって、境界値付近を念入りにテストしましょう。もちろんそれだけではありませんが、まずは境界値を確認するのがセオリーです。
ともかく、動作テストのセオリーに自分でたどり着いたメンバーはえらい!

ドリルのネタは取り組んだ内容から
穴抜き方式のドリルは、本日取り組んだ内容をベースに作っています。

多分難しいだろうなあと思いながら、つまづいているメンバーにはヒントを出します。

「モンテカルロ法のプログラムとよく似ているから見比べてごらん」とうながすと「あっ!」という声。この瞬間がめちゃくちゃ嬉しい。思わずニヤニヤしてしまいます。
この「あっ!」をもっと作れるように題材を準備していきたいと思います。

