Python | 1 日 90 分 × 7 日アプリ学習:数当てゲーム(初級編)

Python
スポンサーリンク

2日目のゴールと今日やること

2日目のテーマは
「1回勝負の数当てゲームを、“当たるまで何回もチャレンジできるゲーム”に育てる」
ことです。

1日目では、

  • 正解の数字(answer)を用意する
  • プレイヤーの入力(guess)を受け取る
  • if 文で「大きい」「小さい」「正解」を判定する

ここまでできました。

今日はここに、

  • 「当たるまで繰り返す」という仕組み(while)
  • 「何回目のチャレンジか」を数える(カウンタ変数)

を加えて、
“ゲームとしてちゃんと遊べる形” にしていきます。


1日目のコードをもう一度整理する

1回勝負の数当てゲーム

まずは、1日目の完成形を思い出しましょう。

answer = 7  # 正解の数字

print("数当てゲームへようこそ!")
print("0〜9 の中から、正解の数字を当ててください。")

guess_text = input("あなたの予想を入力してください: ")
guess = int(guess_text)

print("あなたの答えは:", guess)

if guess < answer:
    print("もっと大きい数字です。")
elif guess > answer:
    print("もっと小さい数字です。")
else:
    print("正解です!おめでとう!")
Python

これは「1回だけ予想できるゲーム」です。
2日目は、ここに「繰り返し」を足していきます。


「当たるまで繰り返す」という発想

日本語で先に書いてみる

いきなりコードにせず、
まずは日本語で流れを書いてみます。

正解の数字を決める
「数当てゲームへようこそ」と表示する

正解していない間は、ずっと次を繰り返す
 予想を入力してもらう
 大きいか小さいか、正解かを判定する
 正解なら「おめでとう!」と言って終わる

この「正解していない間は、ずっと繰り返す」が、
プログラムでいう while 文 の役割です。


while 文の基本形を理解する

while は「〜のあいだずっと」

Python の while 文は、こういう形です。

while 条件:
    繰り返したい処理
Python

意味は、

「条件が True のあいだ、ずっとこの処理を繰り返す」

です。

例えば、
「カウントが 5 未満のあいだ、数字を表示する」ならこうです。

count = 0

while count < 5:
    print("count は", count, "です")
    count = count + 1

print("ループが終わりました")
Python

実行すると、

count は 0 です
count は 1 です
count は 2 です
count は 3 です
count は 4 です
ループが終わりました

となります。

ここで重要なのは、

  • while の条件が True のあいだは、何度も同じブロックが実行される
  • 中で変数(ここでは count)を変えていかないと、永遠に終わらない

ということです。


数当てゲームに while を当てはめる

条件は「まだ正解していない」

数当てゲームで繰り返したいのは、

「まだ正解していないあいだ、予想させ続ける」

という動きです。

つまり、条件はこうなります。

「guess が answer と違うあいだ」

Python で書くと、

while guess != answer:
    ...
Python

となります。

ただし、ここでひとつ問題があります。
guess を while の前で一度も決めていないと、
「guess って誰?」と怒られます。

なので、最初に「とりあえず何か値」を入れておく必要があります。


「最初の guess」をどう扱うか

先にダミーの値を入れておく方法

一番シンプルな方法は、
while の前で guess に「絶対に正解じゃない値」を入れておくことです。

例えば、正解が 0〜9 のどれかなら、
-1 を入れておけば、必ず「不正解」からスタートします。

answer = 7
guess = -1  # 絶対に正解じゃない値

while guess != answer:
    guess_text = input("あなたの予想を入力してください: ")
    guess = int(guess_text)

    if guess < answer:
        print("もっと大きい数字です。")
    elif guess > answer:
        print("もっと小さい数字です。")
    else:
        print("正解です!おめでとう!")
Python

このコードでは、

  • 最初は guess = -1 なので、guess != answer は True
  • ループの中で本当の guess を入力してもらう
  • 正解なら「正解です!」と言ってから、次のループ条件判定へ
  • そのとき guess == answer なので、ループが終わる

という流れになります。


「何回目のチャレンジか」を数える

カウンタ変数を用意する

ゲームらしくするために、
「何回目で当てたか」を表示してみましょう。

そのためには、
回数を数える変数が必要です。

tries = 0  # 試行回数(チャレンジ回数)
Python

そして、
プレイヤーが予想するたびに 1 ずつ増やします。

tries = tries + 1
Python

あるいは、短く書いて、

tries += 1
Python

としても同じ意味です。


カウンタを組み込んだ数当てゲーム

コード全体

ここまでの要素を組み合わせると、
「当たるまで何回もチャレンジできる数当てゲーム」ができます。

answer = 7  # 正解の数字
guess = -1  # 最初は絶対に正解じゃない値
tries = 0   # 何回チャレンジしたか

print("数当てゲームへようこそ!")
print("0〜9 の中から、正解の数字を当ててください。")

while guess != answer:
    guess_text = input("あなたの予想を入力してください: ")
    guess = int(guess_text)

    tries += 1  # チャレンジ回数を1増やす

    if guess < answer:
        print("もっと大きい数字です。")
    elif guess > answer:
        print("もっと小さい数字です。")
    else:
        print("正解です!おめでとう!")

print("あなたは", tries, "回目で正解しました。")
Python

ここでの流れを整理します。

  • 最初は guess = -1 なので、必ず while に入る
  • ループの中で予想を入力してもらう
  • tries を 1 増やす
  • 大きい/小さい/正解 を判定して表示する
  • 正解なら、次の while 判定でループを抜ける
  • 最後に「何回目で当てたか」を表示する

実行例で動きをイメージする

例:3回目で正解した場合

正解:7
入力:3 → 9 → 7

実行の流れはこうなります。

数当てゲームへようこそ!
0〜9 の中から、正解の数字を当ててください。

あなたの予想を入力してください: 3
もっと大きい数字です。

あなたの予想を入力してください: 9
もっと小さい数字です。

あなたの予想を入力してください: 7
正解です!おめでとう!

あなたは 3 回目で正解しました。

ここで注目してほしいのは、

  • while の中の処理が「予想 → 判定」を何度も繰り返している
  • 正解した瞬間に、次のループ判定で while を抜けている

という動きです。


今日いちばん深く理解してほしいポイント

while は「条件が True のあいだ、ずっと続く」

数当てゲームでは、

while guess != answer:
Python

という条件でした。

これは、

「guess が answer と違うあいだは、ずっと予想させ続ける」

という意味です。

逆に言うと、

「guess が answer と同じになった瞬間に、ループが終わる」

ということでもあります。

カウンタ変数は「ループの中で増やす」

tries のようなカウンタ変数は、

  • ループの外で 0 に初期化する
  • ループの中で 1 ずつ増やす

というのが基本パターンです。

このパターンは、
ゲームに限らず、
「何回やったか」を数える場面で何度も出てきます。


3日目へのつなぎ

2日目は、

  • while で「当たるまで繰り返す」ゲームにした
  • カウンタ変数で「何回目で当てたか」を表示できるようにした

ここまで来ました。

3日目からは、

  • 正解の数字をランダムにする(毎回違うゲームにする)
  • 入力が数字じゃなかったときのエラーを防ぐ
  • 「回数制限」をつけて、ゲームオーバーを作る

といった、“ゲームとしてのルール”を増やしていきます。

最後にひとつだけ。

今日のコードを動かしてみて、
「何回で当てられるか、自分で勝負してみたい」と思いましたか?

その気持ちが、
あなたと「プログラムの中の世界」をつなぐ、いちばん大事なエンジンです。

タイトルとURLをコピーしました