· Fuga578 · Pythonミニ実装  · 9 min read

Pythonで数当てゲームを作ってみよう — 入門のはじめにオススメ

Pythonの「変数・条件分岐・繰り返し・入力・乱数」を一気に使う、入門に最適な数当てゲーム。50行で動くものを完成させながら、各ステップの意図を解説します。

Pythonの「変数・条件分岐・繰り返し・入力・乱数」を一気に使う、入門に最適な数当てゲーム。50行で動くものを完成させながら、各ステップの意図を解説します。

「Pythonの基礎は分かったけど、何を作ればいいかわからない」 — そんな入門者にいちばんオススメなのが数当てゲームです。

  • 変数
  • 条件分岐 (if)
  • 繰り返し (while)
  • ユーザー入力 (input)
  • 乱数 (random)

入門で習うものをぜんぶ使うのに、コードは50行ほどで完成します。この記事では、段階的に組み立てながら、各ステップの「なぜこう書くか」を説明します。

完成イメージ

最終的にこんな感じで遊べるものを作ります。

Terminal
数当てゲーム
1〜100 の数字を当ててください (10回まで)
予想を入力 > 50
もっと大きい!
予想を入力 > 75
もっと小さい!
予想を入力 > 62
もっと小さい!
予想を入力 > 56
正解! 4回で当たりました 🎉

ステップ1: 答えを決める

まずは、コンピューターが「答え」をひとつ用意するところから。1〜100 のランダムな整数にします。

import random

answer = random.randint(1, 100)
print(f"答えは {answer} です (デバッグ用表示)")

random.randint(1, 100) は1以上100以下の整数を返します。実行のたびに違う答えになります。

ステップ2: ユーザーの予想を受け取る

guess_str = input("予想を入力 > ")
guess = int(guess_str)
print(f"あなたの予想: {guess}")

input() はユーザーの入力を文字列で返します。数字として比較したいので int() で整数に変換します。

ステップ3: 答えと比較する

ここで if-elif-else

if guess < answer:
    print("もっと大きい!")
elif guess > answer:
    print("もっと小さい!")
else:
    print("正解!")

これで「1回だけ予想して結果を出す」ゲームができました。

ステップ4: 正解するまで繰り返す

正解するまで何度も入力させたいので、while ループでくくります。

import random

answer = random.randint(1, 100)

while True:
    guess = int(input("予想を入力 > "))
    if guess < answer:
        print("もっと大きい!")
    elif guess > answer:
        print("もっと小さい!")
    else:
        print("正解!")
        break

while True: は「永遠に続くループ」。break を呼ぶことでループから抜けます。正解したときだけ break するので、それまでは何度でも入力できます。

ここまでで、もう遊べる数当てゲームになっています。

ステップ5: 試行回数を数える

「何回で正解したか」を数えてみましょう。これは入門者にとってよくある「カウント変数」のパターン。

import random

answer = random.randint(1, 100)
attempts = 0      # 試行回数

while True:
    guess = int(input("予想を入力 > "))
    attempts += 1                    # 1回試行したのでカウントアップ
    if guess < answer:
        print("もっと大きい!")
    elif guess > answer:
        print("もっと小さい!")
    else:
        print(f"正解! {attempts}回で当たりました 🎉")
        break

attempts += 1attempts = attempts + 1 の短縮形。ループのたびに1ずつ増えるので、結局は試行回数になります。

ステップ6: 制限回数を設ける

「10回以内に当てて」というルールを足してみましょう。これはゲームっぽくする最後の仕上げ。

import random

answer = random.randint(1, 100)
max_attempts = 10
attempts = 0

print("数当てゲーム")
print(f"1〜100 の数字を当ててください ({max_attempts}回まで)")

while attempts < max_attempts:
    guess = int(input("予想を入力 > "))
    attempts += 1

    if guess < answer:
        print(f"もっと大きい! (残り {max_attempts - attempts} 回)")
    elif guess > answer:
        print(f"もっと小さい! (残り {max_attempts - attempts} 回)")
    else:
        print(f"正解! {attempts}回で当たりました 🎉")
        break
else:
    print(f"残念! 答えは {answer} でした")

while ... else: という、Python 独特の書き方があります。break で抜けずにループが普通に終わったときelse: の中身が実行されます。今回なら「制限回数まで使い切ったけど当たらなかった」場合。

ステップ7: 不正な入力に対応する (応用)

ユーザーが数字以外を入れたらクラッシュします。これを防ぐには try-except

import random

answer = random.randint(1, 100)
max_attempts = 10
attempts = 0

print("数当てゲーム")
print(f"1〜100 の数字を当ててください ({max_attempts}回まで)")

while attempts < max_attempts:
    user_input = input("予想を入力 > ")
    try:
        guess = int(user_input)
    except ValueError:
        print("数字を入力してください")
        continue       # カウントせずに次のループへ

    if not (1 <= guess <= 100):
        print("1〜100 の範囲で入力してください")
        continue

    attempts += 1
    if guess < answer:
        print(f"もっと大きい! (残り {max_attempts - attempts} 回)")
    elif guess > answer:
        print(f"もっと小さい! (残り {max_attempts - attempts} 回)")
    else:
        print(f"正解! {attempts}回で当たりました 🎉")
        break
else:
    print(f"残念! 答えは {answer} でした")

try の中で例外が出たら except に飛んで、エラーメッセージを出して continue で次のループへ。範囲外の数字も同様に弾きます。

これで、人間がどれだけ意地悪な入力をしてもクラッシュしないゲームの完成です。

さらに発展させるアイデア

このベースができたら、いろいろ拡張できます。

  • 難易度選択: 簡単 (1〜30, 5回) / 普通 (1〜100, 10回) / 難しい (1〜500, 12回)
  • ヒント機能: あと2回で外したら「下1桁は X だよ」と教えてくれる
  • スコアシステム: 早く当てるほど高得点、ハイスコアをファイルに記録
  • 複数プレイヤー: 交互に答えを決めあう

まとめ

数当てゲームを作る中で、こんなものを使いました:

  • import randomrandom.randint — 乱数
  • inputint() — ユーザー入力の受け取り
  • if-elif-else — 条件分岐
  • while ... else — 繰り返し (else は制限回数を超えた時に発火)
  • try-except — エラー対応
  • f-string — 文字列の整形

入門で習う要素がほぼ全部入っています。何を作るか分からない という人は、まずこれを書いてみるのがオススメ。

次は乱数を使ったジャンケンゲームや、リストを使ったクイズプログラムなど、似た構造の小さいゲームに挑戦すると、力がぐっと付きます。

Back to Blog

Related Posts

View All Posts »