· Fuga578 · Pythonミニ実装 · 9 min read
Pythonで数当てゲームを作ってみよう — 入門のはじめにオススメ
Pythonの「変数・条件分岐・繰り返し・入力・乱数」を一気に使う、入門に最適な数当てゲーム。50行で動くものを完成させながら、各ステップの意図を解説します。

「Pythonの基礎は分かったけど、何を作ればいいかわからない」 — そんな入門者にいちばんオススメなのが数当てゲームです。
- 変数
- 条件分岐 (
if) - 繰り返し (
while) - ユーザー入力 (
input) - 乱数 (
random)
入門で習うものをぜんぶ使うのに、コードは50行ほどで完成します。この記事では、段階的に組み立てながら、各ステップの「なぜこう書くか」を説明します。
完成イメージ
最終的にこんな感じで遊べるものを作ります。
数当てゲーム 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("正解!")
breakwhile 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}回で当たりました 🎉")
breakattempts += 1 は attempts = 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 randomとrandom.randint— 乱数inputとint()— ユーザー入力の受け取りif-elif-else— 条件分岐while ... else— 繰り返し (else は制限回数を超えた時に発火)try-except— エラー対応- f-string — 文字列の整形
入門で習う要素がほぼ全部入っています。何を作るか分からない という人は、まずこれを書いてみるのがオススメ。
次は乱数を使ったジャンケンゲームや、リストを使ったクイズプログラムなど、似た構造の小さいゲームに挑戦すると、力がぐっと付きます。

