岩手県北上市のプログラミングスクールなら「iTeen(アイティーン)北上校」!!教育のプロが、プログラミングを一から丁寧に個別指導します。小学生から高校生対応!岩手県北上市のプログラミング、IT知識の個別指導「iTeen北上校」

【Python編①】心を読む!? 「マインドリーダー100」を作ろう!

皆さん、こんにちは!YumePro/iTeen北上校 教室長のゆめとです。

今回から私のプログラミング学び直しも兼ねて新シリーズを開始します!

新シリーズ!「ゆめと教室長とプログラミング!

第1弾は、あなたの心を“読んだように”当てる《マインドリーダー100》をPythonで作ります。



まずはゴールのイメージ


 • あなたは 1〜100 の好きな数字を1つ頭に思い浮かべます。

 • コンピューターが「その数字は○○より大きい?」と質問してくるので、yes / no で答えてください。

 • すると…最大7回の質問で、あなたの数字をピタリと言い当てます!


どうして7回で必ず当たるの?

→ 100通りの中から1つをしぼるには、2の累乗で考えると分かりやすいです。

2⁶=64 < 100、2⁷=128 ≥ 100 ⇒ 7回の二者択一で100通りをカバーできます(=二分探索の考え方)。



完成コード(基礎版)





コードを“全部”理解しよう(基礎→実践)


print関数(表示)

画面に文字や数値を出します。授業では説明→指示→結果の順にprint()で丁寧に出すと親切。


print('1 から100 ... 思い浮かべてください。')



変数(値の入れ物)

lowとhighで 今の候補範囲 を表します。最初は 1〜100。


low = 1

high = 100


ここで print(low, high) はデバッグ用。開発中に内部の状態を見える化します(本番では消してOK)。


forループ(回数で繰り返す)


for i in range(7):


range(7) は 0〜6 の7回を意味します。

7回質問すれば必ず当てられる理屈(2⁷ ≥ 100)に合わせた設計です。


早期終了(break)


if low == high:

    break


候補が1つにしぼれたら、ムダな質問をせずに即終了。これが“スマート”なコード。


算術演算子 //(整数の割り算)


guess = (low + high) // 2


// は小数点以下を切り捨て

例:(1+100)//2 = 50

二分探索では「真ん中」をとるので、小数点は不要=整数でOK

※ / だと小数(float)になり後で扱いづらくなります。


input関数(入力)


answer = input()


キーボードから文字列として受け取ります。ここでは "yes" かそれ以外(=no扱い)。


if文(分岐)


if answer == "yes":

    low = guess + 1

else:

    high = guess


 • yes(大きい)⇒ 範囲を [guess+1, high] に狭める

 • no(小さい or 等しい)⇒ 範囲を [low, guess] に狭める


“等しい”を明示で扱っていないのに当たる理由:

no側にguessを含める設計(high = guess)だから、最終的に low == high == 正解 に収束します。


結果表示


print('あなたの考えている数字は', low, 'ですね!')


ループを抜けたら low と high は同じ=それが答え



追跡してみよう:たとえば「73」を思い浮かべた場合




(>は「大きい?」への回答)

 1. 範囲[1,100] → 推測50 → 73は50より大きい(yes) ⇒ low=51

 2. 範囲[51,100] → 推測75 → 73は75より大きくない(no) ⇒ high=75

 3. 範囲[51,75] → 推測63 → 73は大きい(yes) ⇒ low=64

 4. 範囲[64,75] → 推測69 → 大きい(yes) ⇒ low=70

 5. 範囲[70,75] → 推測72 → 大きい(yes) ⇒ low=73

 6. 範囲[73,75] → 推測74 → 大きくない(no) ⇒ high=74

 7. 範囲[73,74] → 推測73 → 大きくない(no) ⇒ high=73 → low==high==73 



デバッグのコツ(初学者がつまづくポイントと対策)


1) 途中経過を出す


print(f"[DEBUG] i={i}, low={low}, high={high}, guess={guess}, answer={answer}")


何がどう変化しているかを視覚化。バグ発見が一気に楽に。


2) よくあるエラー

 • IndentationError: インデント(字下げ)ずれ。forやifの内側は4スペースで統一。

 • NameError: 変数名の綴りミス(hoghなど)。コピペで回避。

 • TypeError: /で小数にしてしまい、後続で整数前提の処理と衝突。//を使う

 • ロジックミス: if answer == "yes": high = guess のような反対代入に注意。


3) テスト観点

 • 端の値:1100を正しく当てられる?

 • 中央値:50を正しく扱える?

 • 入力揺れ:Yes / YES / y などにも対応したいなら正規化(後述の改良版)を導入。



改良版:入力ゆれ対応&丁寧プロンプト


基礎版は学習用としてシンプル。そのうえで、実運用では入力のゆれ(Yes, y, はい など)に強くしておくと体験が良くなります。例えば...




ポイント

 • strip().lower() で空白・大小文字ゆれを吸収

 • while True: で無効入力を再質問

 • f文字列(f'...')で可読性UP



学びの整理(今回のキーワード)

 • print関数:結果や案内を表示

 • 変数:low, high, guess で状態管理

 • コメント:#で意図を残す(未来の自分/仲間のため)

 • forループ:決まった回数の繰り返し

 • 算術演算子:+ - //(整数割り算)

 • input関数:ユーザーから情報を受け取る

 • if文:条件で分岐

 • デバッグ:途中経過の可視化・テスト観点・エラー対処



もっと楽しくする発展アイデア

 1. 回数の自動計算

範囲がN(例:1〜1000)でも、必要回数はだいたい ceil(log2(N))。範囲を自由入力にして万能化

 2. キャラクター化

質問するたびに、表情アイコンやセリフを変える(テキストでもOK)。

 3. ウソ検出モード(上級)

矛盾した回答(範囲が成立しない)を検知してやり直し提案。

 4. GUI化

tkinterでボタン(はい/いいえ)にして小学生でも直感操作

 5. 結果演出

当てたときに効果音やASCIIアートでドーン!と祝う。



親御さまへ:この授業で育つ力

 • 論理的思考:情報を半分にしぼる「二分探索」の発想

 • 問題分解:導入→対話→結果表示という3部構成

 • 検証習慣:デバッグ出力で状況を客観視する方法

 • 表現力:ユーザーに伝わる文言・入力設計(体験設計)



次回予告


次回は 「推理力測定ゲーム」 を予定。

条件分岐やループをもっと活用して、推理クイズの仕掛けを作っていきます。お楽しみに!



体験授業では、アプリを自分好みに改造して持ち帰ることもできます。

「うちの子、どこから始めればいい?」などお気軽にご相談ください!


それでは、また次の「ゆめと教室長とプログラミング!」でお会いしましょう!

体験授業、随時受付中
「うちの子、パソコン全然できないけど大丈夫…?」
そんな方こそ、ぜひ一度教室へ!
初めてでも大丈夫。楽しく、安心して学べる環境をご用意しています✨
お気軽にお問い合わせください♪

夢見る心が未来を創る!
楽しいだけで終わらせない!未来につながる学びを、北上から!

YumePro/iTeen北上校

・住所:岩手県北上市大堤西2丁目6-5

・電話番号:0120-370-270

・メール:kitakami@iteen.jp

・教室長:佐藤 夢斗(さとう ゆめと)