相生コンピュータークラブ第1期(2026年2月)~数あてゲームをつくる・繰り返し~

2月は、第1期完結に向けて進みます。最終的には、数あてゲームを作るのが着地点です。

タイピング練習とアルゴロジック

タイピング練習とアルゴロジックは、基本です。基本が大切。基本が充実してるからこそ、大きく飛躍できます。

この基本コースだけのプランも用意していますので、いきなりプログラミングは難しそう~と思う方はこちらをどうぞ。12月から新しいメンバーが増えています。

プログラミング入門の入門講座(太子・相生・龍野)

AI時代の“学びの土台”を育てる、完全初心者向け準備講座 AI時代に強い子へ。プログラミングの“その前の力”を丁寧に育てる準備講座です。 本編クラブへのスムーズなステッ…

ところで、マウス練習用ゲームを作ったのでメンバーにレビューしてもらいました。

タッチデバイスに慣れた世代なので、マウス操作にはじめは戸惑います。今後マウスがなくなるかどうかはわかりませんが、使えることは良いことなのでこちらも練習します。

繰り返しを実現するwhileとfor

三大制御構文の一つである「繰り返し」を実現するのは、whileとforです。まずは、複数のサンプルを手入力していきます。

意味の理解ははじめのうちはそれほど大切ではなくて、こう書けばこう動くというのを感じるのが重要です。感じてもらいやすくするために、Scratch併記して、こちらはScratchで演習中。

ただ、絶妙に再現できないのがScratchです。さらに出来ないことが多すぎます。例えるなら、Scratchはゴーカート。Pythonは実際の自動車。はやくゴーカートを卒業して、自動車を自由に運転する喜び・楽しみを手に入れてほしいと思います。

whileとforの使い分け

簡単に言うと、使い分けは以下の通り。

  • while→繰り返し回数を指定できないとき(状態監視)
  • for→繰り返し回数を指定できるとき(回数監視)

言葉で説明できたらいいけれど、まずは違いを感じてくれたらOKです。

もちろんドリルもあるよ

ドリル演習も用意しました。小さな積み重ねが力になります。

最後は30行くらいの簡単なゲーム作り

ちょっとに入力に骨が折れるかなと、気合を入れて作ってきました。いとも簡単にクリアされました。

これ、タイピングが速くて正確だとなんのことはないのです。日頃の練習の成果です。素晴らしい。

数あてゲームと大事な話

2026年第1期としては最後の最後、いよいよいよ数あてゲームを作ります。と言っても、今回は写経です。

写経するコードは以下の3つ。

  • ヒントなし、1~100の数字を当てるゲーム
  • 1に加えて、ヒントあり(大小を教えてくれる)
  • 2に加えて、正解までにかかった回数を教えてくれる

これで1時間以上かかるだろうと読んでいたのに、30分くらいで終わってしまいした。

2分探索が重要

早く終わったかどうかは問題ではなくて、重要なのは1のコードだと正解にたどり着くのがとても大変で、2のコードだとかなり早く正解にたどり着けるということが重要です。この辺をフォローします。

1のコードで正解しようとすると、専門的には「線形探索」という探索をします。2のコードで正解しようとすると、専門的には「2分探索」という探索をします。

線形探索だと、1~100までの数字でランダムに決まった数字を当てようと思ったら、平均で50回の思考が必要です。一方、2分探索だと6回程度で正解にたどり着けます。

ちなみに普通高校の情報科目(必修)で問われやすい内容で、大学入試共通テストでも問われます。テストに出るから大事というわけではなく、大切な理屈だからテストに出るのです。

小学生に2分探索が速いよ! といってもなかなか難しいので、プログラムを組んで動きを体感してもらいました。2分探索の名前は知らずとも実践していたメンバーもいれば、初めて知ったメンバーもいるようでした。今後に活かしてくれたら何よりです。

追加課題

ある程度早く終るメンバーがいるだろうことは予測していて、簡単なゲームを写経してもらうように用意していました。しかし、こちらも早く終わってしまって、追加課題です。

下は、線形探索と2分探索にかかる時間がどのように変化するか体感するプログラムです。なお、エラーを3つ仕込んでいますので、各自修正して使ってください。

import time

# 1. データの数を決める
prin("--- 探索スピード実験 ---")
n_input = input("データの数はいくつにする? (例: 1000000): ")
n = int(n_input)

# 0から順番に並んだリストを作る
data = list(range(n))
target = n - 1  # 一番最後の数字を探すのが一番大変!

print(f"{n:,}個のデータから {target:,} を探すよ!\n")

# --- A: しらみつぶし作戦(線形探索) ---
start_time = time.perf_counter()

for x in data:
    if x == target:
        break

end_time = time.perf_counter()
time_linear = end_time - start_time
print(f"【A】しらみつぶし作戦: {time_linear:.6f} 秒")

# --- B: 半分ずつ作戦(二分探索) ---
start_time = time.perf_counter()

low = 0
high = len(data) - 1
while low <= high:
    mid = (low + high) // 2
    if data[mid] == target:
        break
    elif data[mid] < target
        low = mid + 1
    else:
        high = mid - 1

end_time = time.perf_counter()
time_binary = end_time - start_time
print(f"【B】半分ずつ作戦 : {time_binary:.6f} 秒")

# --- 結果の比較 ---
print("-" * 30)
if time_binary > 0:
    ratio = time_linear / time_binary
    prin(f"二分探索は、線形探索より 約 {int(ratio):,} 倍はやい!")

これもあっという間に終わってしまいました。

ここまで写経が速くなったら、大量に良質なコードに触れたほうが良いような気がしてきました。かつて意味もわからず写経をしていたメンバーが、あとになって写経したことが良い糧になったと言っていました。

Linuxコマンド練習

あるメンバーがLinuxコマンドに興味を持ったので、簡単な演習。

5つのコマンドを資料でわたしたら、自分なりに引数を変えて試していました。素晴らしいと思います。

そして、以下が実行結果のうち、2つ。そのうちプログラムで作れると面白いな。

次回予告

次回から2026年第2期です。WS2812Bを使った電子工作に取り組みます。